這幾本讓讀者和我在期待的C/C++巨著就是這期我要推薦的——《Essential C++中文版》、《Effective C++中文版》、《The C++ Programming Language》和《C++ Primer》。

  Essential C++(Addison Wesley Pub Co.,1999年10月第一版)的作者Stanley B.Lippman更是C++領(lǐng)域一流的大師級人物,他從1984年開始就與C++結(jié)下了不解之緣:參與了第一個C++編譯器C Front的開發(fā),曾經(jīng)和C++之父Bjarne Stroustrup(詳見下)一起在貝爾實驗室的項目組工作、負責(zé)研究C++程序開發(fā)環(huán)境中的對象模型,后來又擔(dān)任著名的C++Report雜志編輯,此后他到迪斯尼旗下的夢工廠出任軟件技術(shù)總監(jiān)(Software Technology Director),主要著述有Essential C++、C++Primer、C++Gems、Inside the C++ Object Model、C#Primer等,關(guān)于作者的更詳細信息可以到其個人網(wǎng)站(http://www.objectwrite.com,該網(wǎng)址筆者已驗證無誤)查詢。Lippman當(dāng)前在業(yè)界的影響力可以從最近發(fā)生的一件事情看出:不久前微軟已經(jīng)邀請了C++編程語言的先驅(qū)Stanley B.Lippman加盟它的Visual C++.Net開發(fā)小組,以打消廣大的C++編程人員的疑慮。Essential C++是Lippman在C++ Primer之后的著作,可以說是厚積薄發(fā)的精髓之作。不要想當(dāng)然地覺得這本書只有276頁就是烹小鮮的入門向?qū)А鋵?,我到覺得如果想通過一本書入門,1237頁的C++ Primer或1109頁的The C++ Programming Language更加適合。Essential C++分為7個章節(jié),分別是C++基礎(chǔ)、面向過程的編程風(fēng)格、泛型編程風(fēng)格、基于對象的編程風(fēng)格、面向?qū)ο蟮木幊田L(fēng)格、運用模板編程和異常處理。從結(jié)構(gòu)的安排上我們可以看出作者的深意所在:并不是要手把手地教你鍵入和編譯調(diào)試一個類似“Hello World”的程序,而是要一步一步地教會讀者通過函數(shù)、指針、模板、類等構(gòu)件形成一套完整的編程思想,在不同的需求情況下能夠自如地使用面向過程或面向?qū)ο蟮姆椒ㄟM行程序設(shè)計,正如Bjarne Stroustrup在The C++ Programming Language一書中引用Kristen Nygaard(Simula語言的兩位創(chuàng)造者之一)所說的“Programming is understanding”。如果你是一個新手,在閱讀本書的時候不要忘了找一本更詳細一些的參考教材——作者只用了30頁的篇幅講C++變成的基礎(chǔ)知識,這里面還包括了數(shù)組、向量和指針等內(nèi)容,《Essential C++中文版》(華中科技大學(xué)出版社,2001年8月第一版)已經(jīng)出版,是侯捷的譯著——恐怕業(yè)內(nèi)很少有人不知道這位臺灣大名鼎鼎電腦教育作家,建立在深刻理解基礎(chǔ)上的翻譯質(zhì)量幾乎可以說是無可挑剔了,但對于一些詞匯的翻譯方法和大陸翻譯習(xí)慣的差異還有待磨合和改進(雖然譯者堅持保留其繁體版譯法)。

  Effective C++(Addison Wesley Pub Co.,1997年9月第二版)沒有教你C++語法或函數(shù)、對象、模板之類的東西,這是一本風(fēng)格獨到的經(jīng)典技巧集,曾經(jīng)獲得過1992年度Jolt Award and Productivity Awards,作者教給你的是50個“改善程序技術(shù)與設(shè)計思維”的特別途徑。Scott Meyers是C++業(yè)界公認的權(quán)威,主要從事軟件開發(fā)咨詢工作,活躍在全球各技術(shù)研討會上,同時是C++ Report的重要專欄作家,知名著述出了Effective C++之外還有More Effective C++和Effective STL等,關(guān)于作者的更詳細信息可以到其個人網(wǎng)站(http://www.aristeia.com)查詢?!禘ffective C++中文版》(華中科技大學(xué)出版社,2001年9月第一版)也已經(jīng)在國內(nèi)翻譯出版,譯者還是侯捷。當(dāng)你初步了解C++的全貌之后,Effective C++能夠在短時間內(nèi)大幅度地提高你C++編程的水平,此書的獨特之處在于每一個你遇到的C++問題,Meyers都好像未卜先知地放在了書里,所有讓你困惑的問題你幾乎都可以在這本書中找到精辟的論述——如果能加Meyers的另一本巨著More Effective C++(Addison Wesley Pub Co.,1995年12月第一版)將更會錦上添花。本書在結(jié)構(gòu)上分為改變舊有的C習(xí)慣、內(nèi)存管理、構(gòu)造析構(gòu)函數(shù)與作業(yè)運算符、類與函數(shù)的設(shè)計和聲明、類與函數(shù)的實現(xiàn)、繼承關(guān)系與面向?qū)ο笤O(shè)計以及雜項討論7個部分。很多人都認為你越熟悉C語言或其他面向過程的語言,在學(xué)習(xí)面向?qū)ο蟮恼Z言的時候就會面臨更大的困難,的確,如果你已經(jīng)習(xí)慣了面向過程,在面向?qū)ο蟮臅r候你還是無法忘記過程,為此,Meyers在第一部分就提出了改變舊有的C習(xí)慣,通過幾個小技巧讓你能夠盡量不受原有知識對新知識學(xué)習(xí)的干擾。在接下來的3個部分中,作者又針對讓人頭疼的內(nèi)存管理問題(Java就宣稱采用自動內(nèi)存管理減少了編程復(fù)雜程度和出錯幾率是比C++的一大進步),隨后,作者針對函數(shù)與類的構(gòu)造析構(gòu)、設(shè)計、實現(xiàn)等問題進行了詳實的討論,沒有枯燥的長篇大論,都是結(jié)合實例的分析講解——如果你剛學(xué)C++不久但已經(jīng)可以獨立編寫一些簡單的程序,你會發(fā)現(xiàn)所有被批判的問題程序中都可以找到自己的影子,這真是一件奇妙的事情!在“繼承關(guān)系與面向?qū)ο笤O(shè)計”部分里作者沒有喋喋不休地去討論尚有爭議的問題,而是把精力放在最基礎(chǔ)的理念上,澄清了C++中類的繼承體系設(shè)計與實現(xiàn),并結(jié)合繼承問題闡釋了OOP。“雜項討論”中作者主要討論了編譯、標(biāo)準(zhǔn)庫等問題。打一個粗俗些的比方:Effec tiv e C++和M o re Effec tiv e C++就像是C++學(xué)習(xí)者的手撓,每一下都抓在你的癢處。




  The C++ Programming Language(Addison Wesley Pub Co.,2000年2月第三版,高等教育出版社,2001年8月影印版)是無論哪一個C++學(xué)習(xí)者絕對、絕對不能錯過的頭號經(jīng)典。Rogue Wave公司(Boland C++ Builder中STL方案的提供商)的Nathan Myers說:“15年之后,此書仍然是唯一一本無可替代的C++書籍。”只要有人推薦C++書籍,此書必在其中。正如侯捷先生1999年C++Primer繁體版前言中評價所說:“C++/OOP的領(lǐng)域極廣……,不同的切入角度,都存在不同的經(jīng)典好書。但如果考量的是語言全貌性(百科型)書籍,從來我只推薦兩本,一是Bjarne Stroustrup的The C++ Programming Language,另一是Stanley B.Lippman的C++ Primer。這么說難免遺珠之憾,但是泰山北斗已現(xiàn),又何必案牘勞形于墨瀚書海之中!這兩本書都從C++盤古開天以來,一路改版,斬將搴旗,追奔逐北,成就一身榮光”。作者Bjarne Stroustrup是貝爾實驗室大規(guī)模程序設(shè)計研究部門(Large-Scale Programming Research Department)負責(zé)人,AT&T、ACM成員,主要著述有The C++ Programm ing Language、The Design and Evolution of C++、The Annota ted C++ Reference Manual、C++ In-Depth Box Set(與別人合著)等。1979年Stroustrup開始開發(fā)一種語言,當(dāng)時稱為“C with Class”,后來演化為C++,并于1995年在貝爾實驗室研制成功并投入使用的,Stro u strup也被稱為“C++之父”,關(guān)于作者的更詳細信息可以到其個人網(wǎng)站(http://www.research.att.com/~bs/homepage.html)查詢。1998年,ANSI/ISOC++標(biāo)準(zhǔn)建立,同年,Strousturp推出了其經(jīng)典著作The C++Programming Language的第三版。The C++Programming Language可是說非常全面、權(quán)威,充滿了技術(shù)性極強的材料,很多地方值得反復(fù)回味與思索。Stroustrup說,他所接觸和開發(fā)的軟件無論是在大小、復(fù)雜性和難度來說,根本不是外界一般軟件所能比擬的。本書雖然是一本計算機編程語言教程,但是處處體現(xiàn)出他對于軟件開發(fā)和程序設(shè)計的看法。所以他在書中的很多觀點雖然看上去不覺得有什么了不起的地方,但是當(dāng)你面臨到真正挑戰(zhàn)的時候,就會深刻體會到其真知灼見非同一般。即便我們不考慮語言的障礙,這本書仍然比較難懂,作者很多地方點到即止,其中深意不是初學(xué)者能夠真正領(lǐng)會的。這本書有個綽號——C++專家自學(xué)指南,也就是你必須先是專家,然后再來讀此書自學(xué)提高。

  C++ Primer是Lippman的成名大作——不要看到這個名字就真認為這是“C++的初級讀本”,實際上它是一本標(biāo)準(zhǔn)的“從入門到精通”教材,目前該書的簡體中文版還沒有上市,我到處尋找其英文版也沒能如愿,一個偶然的機會在朋友那里看到了侯捷(見上關(guān)于此書的評價)繁體中文版的C++Primer,大體翻看了一下,感覺此書在實例方面非常詳盡,內(nèi)容可謂是全面、權(quán)威,通俗易懂。初學(xué)者只要能夠認真學(xué)通這本書,足以能自由使用C++編寫程序,成為C++的高手。C++ Primer對標(biāo)準(zhǔn)C++提供了廣泛的介紹,提供了一個思考性的C++學(xué)習(xí)方案,C++中的重要該概念諸如異常處理、容器類型、面向?qū)ο蟮某绦蛟O(shè)計等等都體現(xiàn)在字里行間,對語言規(guī)則也進行了深入地探討,是一本非常好的入門也是提高的教程和參考。全書共分為20章,從C++最基本的元素、數(shù)據(jù)類型到面向過程的程序設(shè)計到泛型算法到基于對象與面向?qū)ο蟮某绦蛟O(shè)計等等,洋洋灑灑,蔚為大觀。此書將由中國電力出版社近期推出簡體中文版,由潘愛民(《COM原理與應(yīng)用》的作者,《Visual C++技術(shù)內(nèi)幕(第四版)》、《深入理解COM+》、《COM本質(zhì)論》、《深入解析ATL》的譯者)主譯。

  在國內(nèi),ISO/ANSIC/C++長期被忽視,很多軟件公司的招聘廣告上寫的都是要求熟悉Visual C++或C++Builder——它們簡直就成了C/C++的代名詞!但ISO/ANSIC/C++有其不可替代的重要性,特別是在軟件移植方面,記得我藍格軟件公司的董事長林燕峰先生(KCOM Space的作者)曾經(jīng)和我說過要保證軟件開發(fā)的可移植性和開發(fā)的可協(xié)作管理就必須遵從業(yè)界標(biāo)準(zhǔn)。值得慶幸的是今年出版界對標(biāo)準(zhǔn)C/C++書籍的渴求終于重視起來,紛紛出版經(jīng)典C/C++書籍。關(guān)于C/C++的“不學(xué)C,無以言”到此已經(jīng)結(jié)束,但并不是說已經(jīng)囊括了C/C++的全部經(jīng)典書籍,像Exceptional C++(Herb Sutter著,Addison Wesley Pub Co.,1999年12月第一版)、《實用C語言編程》(Steve Oualli著,O Reilly & Associates,1997年9月第三版,中國電力出版社,2000年5月中文第三版)、《C/C++嵌入式系統(tǒng)編程》(Michael Barr著,O Reilly & Associates,1999年2月第一版,中國電力出版社,2001年3月中文第一版)等等,或因不得見其書、或因技術(shù)領(lǐng)域太過專細,皆成明代遺賢。