C++的學(xué)習(xí)方法及書(shū)籍推薦2005-08-05 17:35作者:MatrixCpp出處:CSDN責(zé)任編輯:王玉涵(一)我現(xiàn)在理解的C++ 種種原因,很多精力要投入到j(luò)ava的學(xué)習(xí)和使用中去了,想形成一個(gè)學(xué)習(xí)C++的系列文章,沒(méi)有什么風(fēng)格,也沒(méi)有什么時(shí)間表,想到哪就去寫(xiě)。這里把以前自己另外一個(gè)ID發(fā)表的一篇文章的一部分作為這個(gè)系列的第一篇,算是開(kāi)頭吧。 學(xué)習(xí)C++重在理解其各種語(yǔ)言設(shè)施所代表的語(yǔ)義,以及C++所能表示的語(yǔ)義所代表的設(shè)計(jì)思想。首先從宏觀上入手,你需要明白的是C++是程序設(shè)計(jì)語(yǔ)言的本質(zhì)。在此我把C++最重要的性質(zhì)寫(xiě)下來(lái):C++是一門(mén)靜態(tài)類型檢查,基于C內(nèi)存模式,支持四種基本程序設(shè)計(jì)范型的語(yǔ)言。注意,這里說(shuō)明了三個(gè)本質(zhì)特性,靜態(tài)說(shuō)明了語(yǔ)言的類型檢查性質(zhì),基于C內(nèi)存模式告訴我們?cè)贑++中所有與內(nèi)存有關(guān)的操作都需要程序員自己來(lái)負(fù)責(zé),這樣就帶來(lái)了很多設(shè)計(jì)程序時(shí)的需要注意的地方,而理解支持的四種基本范型卻是理解各種語(yǔ)言設(shè)施的基礎(chǔ)。然后記住C++的最大的一點(diǎn)設(shè)計(jì)哲學(xué),也是其貫穿應(yīng)用C++的一條本質(zhì),我引用《C++ PRIMER》中文版前言內(nèi)的一句話表示--“C++的基礎(chǔ)是各種設(shè)施,它們讓用戶能夠通過(guò)定義新的數(shù)據(jù)類型來(lái)擴(kuò)展語(yǔ)言本身,這些新類型可以與內(nèi)置類型一樣的使用方式(如何理解這句話是關(guān)鍵,我的理解是:用戶定義類型可以在任何使用內(nèi)置類型的時(shí)候做為其替代,再具體點(diǎn)說(shuō)就是用戶定義類型可以象內(nèi)置類型那樣可以被聲明,其對(duì)象可以被初始化,可以相互復(fù)制,可以象內(nèi)置類型對(duì)象那樣和很多操作符一起使用,可以被作為參數(shù)傳遞給函數(shù),可以作為函數(shù)的返回值,可以作為容器的操作對(duì)象,用戶定義類型可以和內(nèi)置類型一樣作為模板的參數(shù)),掌握這些設(shè)施(哪些設(shè)施?就是讓用戶定義類型可以和內(nèi)置類型一樣方便使用的設(shè)施,包括什么?構(gòu)造,拷貝,解構(gòu)函數(shù),操作副重載.....)的第一步就是理解基本語(yǔ)言(什么是基本語(yǔ)言?就是C++中better c部分)。 在此,我還想提出一點(diǎn)十分重要的概念:一門(mén)語(yǔ)言的最本質(zhì)的東西就是其類型系統(tǒng),任何語(yǔ)言都有自己的獨(dú)特的類型系統(tǒng),學(xué)習(xí)C++就是學(xué)習(xí)他的類型系統(tǒng)。所以首先需要徹底明白什么是數(shù)據(jù)類型這個(gè)概念。這樣你的思路就清楚了,你有選擇,從每一種C++支持的設(shè)計(jì)范型入手學(xué)習(xí)。 結(jié)構(gòu)化設(shè)計(jì)-----也就是C++中的better c部分,你需要在C的基礎(chǔ)上學(xué)會(huì)函數(shù)重載和引用這兩個(gè)最重要的語(yǔ)言新特心性。 基于對(duì)象----你需要建立C++最強(qiáng)大的概念--類,也就是用戶定義類型,這其實(shí)就是數(shù)據(jù)結(jié)構(gòu)里面接觸的抽象數(shù)據(jù)類型的概念,以及合理構(gòu)造使用類的一系列語(yǔ)言措施。并始終記住,在C++進(jìn)行設(shè)計(jì)時(shí)用類來(lái)表示我們需要表示的概念。類也是C++抽象機(jī)制里面最核心的概念。 面向?qū)ο?---在這里你需要知道繼承和多態(tài)這樣的OO概念,以及句柄類這樣常見(jiàn)的設(shè)計(jì)技術(shù),這里你需要明白你開(kāi)始進(jìn)入了對(duì)接口編程的階段。同時(shí)你要學(xué)會(huì)OO思想,C++的一些設(shè)施只是為了把OO思想在語(yǔ)言所支持的語(yǔ)義中充分的表示出來(lái)。但是在這里,同時(shí)你需要明白的C++能表示的語(yǔ)義是受到其當(dāng)初語(yǔ)言設(shè)計(jì)原則限制的(什么原則?靜態(tài)類型檢查,不為不需要的東西付出代價(jià),選擇權(quán)在程序員手上語(yǔ)言本身不去強(qiáng)迫程序員的做出選擇),也就是說(shuō)C++所能表示的OO思想可以稱為具有C++特色的OO思想了。這樣的OO思想和JAVA所代表的純OO哪個(gè)更好?沒(méi)有定論,因?yàn)樗麄儽旧淼脑O(shè)計(jì)理念就不一樣。 泛型設(shè)計(jì)----這里你需要明白最重要的一點(diǎn)是C++的temlate機(jī)制無(wú)論其開(kāi)始建立的初衷是什么,現(xiàn)在他所代表的真實(shí)含義是:編譯時(shí)類型推導(dǎo),也就是編譯時(shí)多態(tài),由此明白了泛型的核心---把各種類型當(dāng)作一種抽象條件的具體化,C++有措施可以定義抽象條件嗎?沒(méi)有,所以這些條件只能定義在我們自己的心中,但我們可以把具體化的類型當(dāng)作一種抽象條件實(shí)現(xiàn)在template機(jī)制中去,從而使tempalte成為比類型推導(dǎo)機(jī)制更進(jìn)一步的東西,那就是抽象條件的推導(dǎo)。也就是說(shuō),我們不再把template接受的參數(shù)看成是類型,而是把template看成是一種接受抽象條件的機(jī)制,無(wú)論其類型如何,只要這種類型滿足tempalte所接受的抽象條件就可以作為參數(shù)傳遞進(jìn)去,這樣就代表了一種泛型的思想-----類型不再是根本,抽象條件才是,類型不過(guò)是抽象條件的外衣和在C++中的實(shí)現(xiàn)方式而已。在結(jié)合基于對(duì)象和泛型設(shè)計(jì)這兩種抽象設(shè)計(jì)模式的技術(shù)上誕生的工業(yè)產(chǎn)品就是---STL。 (二)書(shū)的誘惑 《C++程序設(shè)計(jì)語(yǔ)言》:如果你只買(mǎi)一本C++書(shū),這本就是你的選擇,作者Bjarne就是讓你做出這樣選擇的全部理由,沒(méi)有人能比他更了解什么樣才是真正的使用C++編程了,有人說(shuō)到這本書(shū)語(yǔ)言晦澀,或者對(duì)與初學(xué)者此書(shū)不適合,對(duì)此評(píng)論我頗不以為然,我看的是中文版,起碼在我看來(lái)語(yǔ)言描敘非常到位,我喜歡這樣的技術(shù)描敘風(fēng)格。全書(shū)的核心就是告訴你如何去用正確的觀念編寫(xiě)正確的C++的代碼。強(qiáng)烈推薦。 《C++語(yǔ)言設(shè)計(jì)與演化》:這本書(shū)也是我同時(shí)擁有中英兩版的兩本書(shū)之一(另外一本是《設(shè)計(jì)模式》)。如果在得到上面的那本書(shū)之后你需要第二本,那么在我看來(lái)這就是你的選擇,作者同樣是Bjarne,他將在這本書(shū)中告訴你C++的起源與發(fā)展,語(yǔ)言原則與本質(zhì),各種特性加入的理由和考量,以及幾乎一切關(guān)于C++有趣的故事。我閱讀過(guò)中英兩版,都是強(qiáng)烈推薦。 《C++標(biāo)準(zhǔn)程序庫(kù)》:在AMAZON上面關(guān)于C++書(shū)籍評(píng)論最為火暴的一本。全書(shū)對(duì)于標(biāo)準(zhǔn)程序庫(kù)的介紹可謂深入淺出,而且全書(shū)都是從實(shí)際運(yùn)用出發(fā),書(shū)中例子簡(jiǎn)單卻非常說(shuō)明問(wèn)題,加上一些圖表的陳列,使其概念十分清晰,而且從手冊(cè)和學(xué)習(xí)兩方面看都有其存在價(jià)值。強(qiáng)烈推薦。 《EFFECTIVE C++ 中文版》:無(wú)須多說(shuō),在任何C++書(shū)籍推薦目錄中都可以找到這本書(shū)的身影,盛名之下必?zé)o虛士。主要強(qiáng)調(diào)的是運(yùn)用C++的各種特性的時(shí)候所必須注意的地方,以及一些比較通用的設(shè)計(jì)手段。其短小精悍的語(yǔ)言自然非常適合快節(jié)奏的現(xiàn)代風(fēng)格,個(gè)人就十分喜歡Meyer的寫(xiě)作方式。強(qiáng)烈推薦。 《MORE EFFECTIVE C++ 中文版》:做為上本書(shū)的姐妹篇,一樣的寫(xiě)作風(fēng)格,一樣的寫(xiě)作目的。只是個(gè)人認(rèn)為和其姐姐相比,存在差距,主要是信息量沒(méi)有《EFFECTIVE C++ 中文版》那么大,主要說(shuō)到了一些C++的設(shè)計(jì)慣用手法。推薦。 《C++ PRIMER 中文版》:同樣是出自大師之手,作者LIPPMAN,作為早期C++編譯器的實(shí)現(xiàn)者之一,對(duì)與C++的了解以及該如何論序都有自己的獨(dú)到見(jiàn)解。做為C++的百科全書(shū)和《C++程序設(shè)計(jì)語(yǔ)言》有著一樣的地位。但是前者更強(qiáng)調(diào)的是C++的語(yǔ)法和其語(yǔ)義,而后者則是以如何用C++進(jìn)行合理設(shè)計(jì)做為描敘的中心。全書(shū)構(gòu)思十分巧妙,書(shū)的一開(kāi)始就直接進(jìn)入C++的主題,前面五章都用類設(shè)計(jì)一個(gè)數(shù)據(jù)結(jié)構(gòu),讓讀者完全明白了各種用戶定義類型所代表的抽象能力,然后直接進(jìn)入第六章標(biāo)準(zhǔn)庫(kù)中的容器類,這樣的設(shè)計(jì)讓讀者十分清楚的建立容器和類這兩個(gè)C++中十分重要的概念。這樣的設(shè)計(jì)針對(duì)有一定基礎(chǔ)的C++讀者來(lái)說(shuō)可以說(shuō)是非常有效果的。但是對(duì)于初學(xué)者來(lái)說(shuō),這確實(shí)不是一本合適的書(shū)籍,因?yàn)橐簧蟻?lái)太多的名詞會(huì)把剛剛接觸C++的人嚇著的。推薦。 《C++沉思錄》:非常有特點(diǎn)的一本書(shū),全書(shū)假設(shè)讀者已經(jīng)通曉C++語(yǔ)言,重點(diǎn)告訴讀者C++的概念以及一些C++的設(shè)計(jì)手段,比如用C++到底為什么會(huì)比C或者其他過(guò)程語(yǔ)言更好?(書(shū)中給出的答案是,因?yàn)橹挥袑?duì)象才有能力保持一定的狀態(tài),而算法沒(méi)有這樣的能力),如何進(jìn)行抽象數(shù)據(jù)類型的程序設(shè)計(jì),如何理解多態(tài),如何通過(guò)代理隱藏繼承,如何進(jìn)行引用技數(shù),為了效率如何進(jìn)行緩時(shí)拷貝,以及模板技術(shù)是如何發(fā)展演進(jìn)最后構(gòu)成成STL庫(kù)的。閱讀感覺(jué)和《C++程序設(shè)計(jì)語(yǔ)言》一樣,思想性非常強(qiáng),讀這樣的書(shū)很累,腦子必須一直思考問(wèn)題,思考作者里面提出的問(wèn)題和他提出的解決方式。這本書(shū)最大的特點(diǎn)是非常直接的把C++語(yǔ)言的核心暴露出來(lái)-----三種抽象模型和極其語(yǔ)言設(shè)施本身對(duì)這三種抽象模型的支持。而《C++沉思錄》給我的更深層思考是什么才是運(yùn)用C++最合理的方式。推薦。 《C++ STL中文版》:很樸實(shí),不花俏,但是價(jià)值很高。個(gè)人認(rèn)為其主要價(jià)值體現(xiàn)在以下幾個(gè)方面:1,對(duì)于STL的實(shí)現(xiàn)關(guān)鍵iterator一般都使用了兩種方式描敘,一種比較老式的函數(shù)方法,一種是新的?traits技巧,這樣讀者可以非常清楚的知道技術(shù)的演進(jìn)。2,提供了一個(gè)STL LITE版本,閱讀這樣的代碼對(duì)自己的提高非常大。3,書(shū)中提供的測(cè)試模塊對(duì)于讀者來(lái)說(shuō)也是非常有的一章,對(duì)于想擴(kuò)展STL的,可以按照上面提供的方法測(cè)試自己的STL組件。缺點(diǎn):裝訂比較粗糙,與大師之作的地位不相稱。推薦 《C++ PRIMER PLUS 中文版》:一本思想性不是很強(qiáng),技巧性不是很強(qiáng)的書(shū),但是對(duì)于初學(xué)者來(lái)說(shuō)非常合適的書(shū)。其中許多論序方式都和具體化,總體來(lái)說(shuō),這本書(shū)是我看過(guò)的C++書(shū)籍里面最合適初學(xué)者的。推薦。 《深度探索C++對(duì)象模型》:這也是一本比較特別的書(shū),告訴你編譯器是如何安排處理對(duì)象的內(nèi)存空間的,以及一些OO特性是如何實(shí)現(xiàn)的。不認(rèn)為這是一本C++必須讀物,算是課后讀物應(yīng)該比較合適吧,因?yàn)橛袝r(shí)間了解C++的OO實(shí)現(xiàn)還不如花點(diǎn)時(shí)間搞清楚OO理論的本質(zhì)概念:type theory。推薦。 《C++設(shè)計(jì)新思維——泛型編程與設(shè)計(jì)模式之應(yīng)用》:可謂C++中的奇書(shū)。這樣的一本書(shū),很難讓人做出正確的評(píng)價(jià)與推薦指數(shù)(尤其是以我這個(gè)實(shí)用和人生本就應(yīng)該享樂(lè)為人生觀的人來(lái)說(shuō)~:),因?yàn)槿珪?shū)所代表的思想前衛(wèi)到了有點(diǎn)不切實(shí)際的地步,模式+泛型—多么高雅的組合。我個(gè)人的觀點(diǎn)是,只有一部分人需要閱讀此書(shū),他們就是所謂的real c++ fans,暫且不提C++本身是否遇到了困難,就其書(shū)中所代表的設(shè)計(jì)思想,對(duì)于C++沒(méi)有一點(diǎn)感情的程序員(感情就是以愛(ài)好為基礎(chǔ),而不是以攢錢(qián)為前提),我想對(duì)于這樣的設(shè)計(jì)技術(shù)總會(huì)有暈的感覺(jué),而一般程序員多半都不會(huì)喜歡這樣的感覺(jué)~:)。推薦。 《對(duì)象揭秘:Java、Eiffel和C++》:從書(shū)名就可以看出這本書(shū)不僅僅和C++有關(guān)系??梢哉f(shuō)全書(shū)就是對(duì)C++的一次批判吧(書(shū)也起源與作者的一篇批判C++的文章)。有時(shí)候聽(tīng)聽(tīng)另外一種聲音對(duì)自己保持清醒的頭腦是非常有幫助的,對(duì)待一個(gè)人,對(duì)待一本書(shū)以及對(duì)待一門(mén)程序設(shè)計(jì)語(yǔ)言都是如此。這本書(shū)好象不是很火,大概跟其宣傳不是很到位,或者同能同時(shí)了解這三門(mén)語(yǔ)言并比較關(guān)心這些語(yǔ)言深層次的優(yōu)略的讀者比較少有關(guān)系吧,在我看來(lái)這本書(shū)包含了許多對(duì)象與類型方面的理論,最為出彩的就是作者抓住Bjarne的“在C++中一個(gè)類就是一個(gè)類型”這樣的“錯(cuò)誤”言論狠批的論證過(guò)程??催@本書(shū)另外一個(gè)好處是能教會(huì)大家該如何去合理的辯駁自己的對(duì)手~:)。推薦。 《大規(guī)模C++程序設(shè)計(jì)》:書(shū)在手上很久了,可一直沒(méi)有仔細(xì)看,這也是評(píng)論之前必須說(shuō)明的。總體看來(lái)書(shū)中涉及的很多東西都鮮見(jiàn)于其他讀本。不管AMAZON上的評(píng)論是否是這本書(shū)比較過(guò)時(shí),起碼它介紹的許多對(duì)與我來(lái)說(shuō)都是我所不知道不了解的,別人說(shuō)過(guò)時(shí)是他的事情。而我,還是推薦。 《STL和泛型編程》:難得的一本關(guān)于泛型編程的理念書(shū)籍,同樣也是作為手冊(cè)和學(xué)習(xí)兩用,但是其手冊(cè)不是使用手冊(cè),而是概念手冊(cè),對(duì)于設(shè)計(jì)自己的STL組件,這本書(shū)有非常好的幫助,雖然網(wǎng)上有篇STL的文檔,其中的70%內(nèi)容和這本書(shū)雷同,但此書(shū)仍不失可讀性。推薦。 《C++編程思想 第二版》:非常一般的書(shū),是的這就是我對(duì)這本很多人奉為名著的評(píng)論,至于為什么是這樣的評(píng)論,或者你不相信我說(shuō)的是客觀話,在你買(mǎi)了之后看完就知道了。一般。 《Essential C++中文版》:總感覺(jué)這本書(shū)定位不是很清楚,因?yàn)閷?duì)于初學(xué)者來(lái)說(shuō)其開(kāi)始就涉及了太多的名詞,初學(xué)者看這本書(shū),幾乎就不要指望能很好的入門(mén)。而對(duì)于進(jìn)階者來(lái)說(shuō),其內(nèi)容并無(wú)新意,對(duì)于C++高手來(lái)說(shuō),這樣的小讀本,根本就沒(méi)有閱讀的必要,也許是LIPPMAN+JJHOU的盛名吧,但我覺(jué)得這次算是有虛士了~:)。一般。 《STL源碼剖析》:侯SIR的大陸兩本著作之一,但在我心中其質(zhì)量好象并不如很多人說(shuō)的那樣好,就同類作品《C++ STL中文版》相比較內(nèi)容略現(xiàn)單薄,并且三章之后很多東西都給人以堆砌的感覺(jué),而且大部分精彩的材料都出自《STL和泛型編程》一書(shū),給人感覺(jué)書(shū)中侯SIR自己的東西并不多,但第二章對(duì)于內(nèi)存管理有很好的論敘表現(xiàn),并且裝訂精良,尤其是那些圖更是侯SIR的拿手好戲,但總體感覺(jué)有點(diǎn)華而不實(shí)。一般。 后面列出兩本不推薦的,具體原因也就不再分析。 《高質(zhì)量程序設(shè)計(jì)指南--C++/C語(yǔ)言》,《C++編碼規(guī)范》 另外兩本常見(jiàn)的C++書(shū)籍: 《Exceptional C++中文版》,《More Exceptional C++中文版》我本人并沒(méi)有閱讀過(guò),但其名聲不小,而且加之曾經(jīng)給此書(shū)作者Herb Sutter通郵件的經(jīng)歷,那種考慮到時(shí)差都不到24個(gè)小時(shí)的回信率以及在信中耐心的對(duì)技術(shù)講解的態(tài)度,同樣向大家推薦這兩本書(shū),因?yàn)樵谖铱磥?lái)Herb Sutter能力無(wú)須考慮加上這樣待人的態(tài)度,其作品理所值得大家閱讀。 是的,上面就是我大半年來(lái)看過(guò)的C++的書(shū)籍,肯定不少人要嘲笑我的個(gè)書(shū)呆子了~:),其實(shí)我確實(shí)就是一個(gè)書(shū)呆子,至于是否需要看這么多書(shū),我個(gè)人意見(jiàn)是不需要,不然我還給出推薦等級(jí)干什么?選擇自己需要的就是最好。引用曾經(jīng)有人說(shuō)到的---評(píng)書(shū)其實(shí)就是個(gè)“如人飲水,冷暖自知”的事情。真正的書(shū)評(píng)在哪里?各自的心里。 |
|
|
來(lái)自: 青石水 > 《我的圖書(shū)館》