如何學(xué)好C++呢?
我們知道,C#的語(yǔ)法與C++非常相似,實(shí)現(xiàn)從C++向C#的轉(zhuǎn)變,其困難不在于語(yǔ)言本身,而在于熟悉.NET的可管理環(huán)境和對(duì).NET框架的理解,要把學(xué)C++作為日常語(yǔ)言,而不是一種程序語(yǔ)言,這樣就好辦了。
其次要大量大量的實(shí)踐,只有實(shí)踐才能真正掌握編程的技術(shù)。有人又要問(wèn)我,那么我應(yīng)該讀什么書(shū)才好?沒(méi)有時(shí)間怎么辦?我只能對(duì)你們說(shuō),沒(méi)時(shí)間的話,就別學(xué)C++了,做你們喜歡做的事。生活中沒(méi)有C++,也同樣美好。
如果你準(zhǔn)備學(xué),一定要學(xué)好,那么我開(kāi)個(gè)書(shū)單,應(yīng)該問(wèn)題不是甚大。首先肯定要讀一讀Bjarne Stroustrup的The Design and Evolution of C++,了解一下這個(gè)語(yǔ)言的歷史。接下來(lái)就可以看別的書(shū)了,但要不停地回頭看這本書(shū),看到你不斷地學(xué)到的新技術(shù)是怎么樣一點(diǎn)點(diǎn)地被接納到這個(gè)語(yǔ)言中去的。
第一本書(shū)因人而異,基礎(chǔ)好一些的,可以看Stanley B. Lippman的C++ Primer,這本書(shū)非常地巨大,你打星號(hào)的部分可以不要看?;A(chǔ)不太好的,可以看Stanley B.Lippman的Essential C++,這本書(shū)份量要輕得多,不過(guò)四個(gè)C++的范型都講了,而的境界,但是語(yǔ)言非常平實(shí),只要認(rèn)真地讀,即使基礎(chǔ)不行,也一定可以懂。
錯(cuò)的代碼的大小問(wèn)題了。如果你能一眼看出有人的代碼是對(duì)應(yīng)于"條款27"或"條款M6",那你可真是讓本人刮目了。
我已經(jīng)講了。
如果要寫(xiě)程序,EC++和MEC++的境界已經(jīng)足以使你自如應(yīng)付,可是如果你還不滿足,想關(guān)注一些理論層面的問(wèn)題,或是想看看實(shí)現(xiàn)的代碼,你就不應(yīng)該錯(cuò)過(guò)這幾本好極了的書(shū)。我是說(shuō)Herb Sutter的Exceptional C++和MoreExceptional C++,這兩本書(shū)的難度是非常大的。
我對(duì)每一條的閱讀筆記都是十多頁(yè)。特別是泛型程序設(shè)計(jì)的部分,這兩本書(shū)旁征博引,極盡深入探討之能事,每每看懂一條,都抹汗一次,大感酣暢淋漓;還有侯捷的 STL源碼剖析 ,以實(shí)際的例子一點(diǎn)點(diǎn)地講解一個(gè)STL是怎么樣實(shí)現(xiàn)的,我是剛開(kāi)始讀,不發(fā)表評(píng)論;
而Stanley B. Lippman,Cfront的實(shí)現(xiàn)者之一,執(zhí)筆寫(xiě)出Inside the C++ ObjectModel,我只有一個(gè)字,就是基本帥呆了。我從中了解了無(wú)數(shù)的編譯器解釋源代碼的細(xì)節(jié),以及記憶體分配的細(xì)節(jié),呵呵,這些都知道了,我還怕什么呢?
最近得到了另一Cfront實(shí)現(xiàn)者、C++標(biāo)準(zhǔn)委員會(huì)Koenig的 C++沉思錄,看起來(lái)非常不錯(cuò),這里也推薦給大家,但我也沒(méi)看完,亦無(wú)發(fā)言權(quán),最后最后,你們,未來(lái)的C++理論家們,可要記住,Bjarne Stroustrup的The C++ Programming Language無(wú)論如何也應(yīng)該讀個(gè)四五遍!這是一切C++的書(shū)本的源泉。如果還覺(jué)得不夠,就向C++標(biāo)準(zhǔn)委員會(huì)訂購(gòu)一本C++標(biāo)準(zhǔn)。
一切中國(guó)大陸作者的書(shū),一概不要看(包括我的)。一切VC++或講特定的編譯器的書(shū),一概不要看。如果需要補(bǔ)C語(yǔ)言的課,買一本非常小的K&R的The Programming Language足矣,其它的書(shū)一概不要看。不要先學(xué)C,再學(xué)C++,而要直接學(xué)C++。你不是先學(xué)古文,再學(xué)白話的,對(duì)不對(duì)?所以相信我,直接來(lái)更容易。