簡介學(xué)習(xí)C++總結(jié)之談
下面首先對(duì)學(xué)習(xí)C++的問題進(jìn)行學(xué)習(xí)探討,C++這們語言太靈活了,它支持過程化程序設(shè)計(jì)、數(shù)據(jù)抽象、面向?qū)ο蟪绦蛟O(shè)計(jì)、制作圖標(biāo)等等泛型程序設(shè)計(jì)等多種程序設(shè)計(jì)風(fēng)格。
首先我們先要知道一點(diǎn),學(xué)習(xí)C++是一門什么語言?簡單點(diǎn)來說,C++是一門接近于全能的語言。為什么說是接近呢?因?yàn)?FONT>C++有一門語言是無法取代的,那就是匯編。再直白點(diǎn)來說,匯編對(duì)于寄存器的操作,C++是無法勝任的。不信?你試試用C++來改寫一下PC寄存器看看?沒轍吧?
"接近"可以理解了,那么"全能"呢?我們知道,C++是兼容C的。不嚴(yán)謹(jǐn)?shù)卣f,我們可以簡單認(rèn)為C只是C++的一個(gè)子集,所以C能做的,C++也能做,這個(gè)應(yīng)該沒有人有異議。為了方便,以下所描述的C++,在某些方面也代表C,之所以沒采用C/C++這樣的寫法,僅僅是為了保護(hù)鍵盤而已。轉(zhuǎn)回正題,那C#呢?JAVA呢?它們所能做的,比如網(wǎng)絡(luò)方面的應(yīng)用,B/S的方方面面,怎么就沒見C++的身影呢?
關(guān)于這個(gè)問題嘛,我們從另一個(gè)角度來看,C#和JAVA的運(yùn)行基礎(chǔ)是什么?沒錯(cuò),是虛擬機(jī)。虛擬機(jī)是用什么寫的?嘿嘿,C++。所以,你完全可以用C++先寫一個(gè)虛擬機(jī),然后再在虛擬機(jī)上解釋C++語法。是不是很酷?
當(dāng)然,我想現(xiàn)實(shí)中是不會(huì)有人那么去做的。就像從深圳到上海,你可以坐飛機(jī)去,也可以騎自行車去。兩者都能到達(dá)目的地,但我估計(jì)沒幾個(gè)人會(huì)選擇后者。這就是效率問題。坐飛機(jī),眼一睜一閉,就到了;騎自行車?呃,這時(shí)間就不好估計(jì)了。所以這領(lǐng)域,該讓C#的,或是JAVA的,就讓它們?nèi)フ垓v吧。至于C++,就讓它干在一旁瞪眼好了,除非你一定想要耍???。
接著,我們就來看看桌面應(yīng)用吧。所謂的桌面應(yīng)用,我們狹義一點(diǎn),就是桌面應(yīng)用程序??偟膩碚f,目前在這領(lǐng)域,C++確實(shí)還能占有一席之地。但這僅有的一席之地,也岌岌可危。在XP之前,因?yàn)橄到y(tǒng)都是沒有預(yù)裝.net framework,所以C++的對(duì)手無非就是VB和DELPHI,但這兩者根本無法撼動(dòng)C++這顆大樹。雖然XP也能裝.net framework,但為了一個(gè)應(yīng)用而弄一個(gè)體積如此巨大的玩意,卻有那么一點(diǎn)點(diǎn)的不現(xiàn)實(shí)。#t#
但后XP時(shí)代,世界就不一樣了。Vista已經(jīng)預(yù)裝了.net framework,更不用說Windows 7。甚至還有傳言,Windows 7的用戶界面就是用C#搞定的。何況,C#還有殺手锏,能和Silverlight***結(jié)合,大大減輕UI的開發(fā)難度??雌饋?,在今后的日子,在這個(gè)桌面應(yīng)用領(lǐng)域。
C++日子過得并不舒坦。在這領(lǐng)域,可能C++還能耀武揚(yáng)威的,也許就剩下大型的3D游戲了。雖然用.net配合OpenGL或Direct3D也能做C++的事,但效率卻會(huì)大打折扣。雖然隨著硬件的不斷提升,可能這折扣會(huì)不斷縮小,但畢竟還是存在的。只要折扣存在,那些游戲廠商就不會(huì)放棄C++,因?yàn)槟軆?yōu)化,為何不優(yōu)化?但,也許也僅僅限于此了。C++,它淚流滿面。
***呢,就是嵌入式領(lǐng)域。在這里,是C++的天下,C++是永遠(yuǎn)的王者。它不是一個(gè)人在戰(zhàn)斗!此刻,它靈魂附體!你見過那些RTOS是用C++以外的語言寫的(再次重申,正如前文所說,這里的C++也代表了C)?
至少我印象中沒有。嵌入式linux支持.net?除非微軟的腦袋秀逗了。也許有人說,WinCE不是可以支持.net么?支持是可以支持,但并不代表所有的WinCE設(shè)備都支持。因?yàn)閃inCE是可裁剪的操作系統(tǒng),也許是為了節(jié)約內(nèi)存空間,也許是為了啟動(dòng)速度,或是由于別的雜七雜八的,甚至莫名其妙的理由,很多廠商根本就不會(huì)將.net這個(gè)會(huì)將系統(tǒng)膨脹至少4M的組件加到產(chǎn)品去。
看看WinCE的內(nèi)核代碼,看看WinCE的BSP包,哪里有.net代碼的身影?全部清一色的C++。甚至于WinCE的應(yīng)用程序,微軟的態(tài)度也非常明確,在桌面只能.net使用的Silverlight,在WinCE SP3添加之后,卻是更改為了C++接口。王者,絕對(duì)的王者,根本就不可能有別的語言在這里將C++撼動(dòng)!此時(shí),C++站起來了!腰板直了!
說了那么多,那么我們的***,就來看看為什么大家都說學(xué)好C++難吧。如果你對(duì)學(xué)好C++沒啥興趣,以下的文字估計(jì)對(duì)你也沒啥營養(yǎng),你可以完全忽略不計(jì),可以很愉快或很氣憤地將當(dāng)前網(wǎng)頁給咔嚓掉。
其實(shí)學(xué)習(xí)C++很簡單,但難就難在這個(gè)"好"字。初學(xué)者會(huì)發(fā)現(xiàn),入門很簡單,因?yàn)?FONT>C++也沒啥語法;但搞清楚語法后,接下來就犯糊涂了,下一步應(yīng)該怎么走呢?只所以產(chǎn)生這種原因,是因?yàn)?FONT>C++太靈活了。對(duì)于一種功能,C++有各種各樣的方法,究竟什么方法才是最合適的?
比如說,傳遞給函數(shù)的形參,什么時(shí)候該使用指針,什么時(shí)候該使用引用?就連平常得再也不能平常的指針轉(zhuǎn)型,有C的括號(hào)形式,還有C++特有的dynamic_cast和reinterpret_cast,究竟哪個(gè)才是該使用的?更不用說分配內(nèi)存了,既有malloc,還有new,如果算上STL的話,還有一個(gè)resize。我想所有的這些,對(duì)于初學(xué)者而言,如果他看著這些能夠腿不痛腰不酸,那么我強(qiáng)烈佩服這人的淡定力。
C++還有更讓初學(xué)者郁悶的是,即使不用STL,不用類,不用虛擬繼承,甚至不用C++的一切特性,也是能夠完成所相應(yīng)的功能。所以,疑惑了,C++是什么?也許這時(shí)候,很多人就會(huì)想,如果選擇是唯一的,那是多么地幸福?。∫虼?,很多人就轉(zhuǎn)向了C#(或別的語言),因?yàn)閷?duì)于某些操作,方法是唯一的;即使不是唯一,也沒有C++那么繁多。
沒打算在這論述該如何學(xué)習(xí)C++,因?yàn)橐磺€(gè)人有一千種方法,而這一千種方法,還不一定適合你。但有一點(diǎn)是共通的,那就是多看書。將市面上經(jīng)典的C++著作,仔仔細(xì)細(xì)地消化,相信一定能達(dá)到爐火純青的地步。即使達(dá)不到吧,也沒事,不會(huì)作詩也會(huì)呤吧?只是,這時(shí)候意志力就非常重要,當(dāng)然也需要那么一點(diǎn)點(diǎn)情商,要相信沒有邁不過的坎。






