《Cplusplus編程思想》

《Cplusplus編程思想》

本書第1版榮獲美國“軟體開發”雜誌評選的1996年圖書震撼大獎(JoltAward),中文版自2000年推出以來,經久不衰,獲得了讀者的充分肯定和高度評價。

《Cplusplus編程思想》Cplusplus編程思想》

第2版與第1版相比,在章節安排上有以下改變。增加了兩章:“對象的創建與使用”和“C++中的C”。前者與“對象導言”實際上是第1版“對象的演化”一章的徹底重寫,增加了近幾年面向對象方法和編程方法的最新研究與實踐的豐碩成果;後者的添加使不熟悉C的讀者可以直接使用本書。刪去了四章:“輸入輸出流介紹”、“多重繼承”、“異常處理”和“運行時類型識別”,刪去的內容均為C++中較複雜的主題,作者將它們連同C++標準完成後增加的一些內容放到本書的第2卷中,使本書的第1卷內容顯得更加集中,可以供不同程度的讀者選擇閱讀。需要強調的是,第2版的改變不僅體現在這些章節的調整上,更多的改變體現在每一章的字裡行間,包括例子的調整和練習的補充。與眾不同的精心選材和認真推敲的敘述使得第2版更趨成熟。
本書是C++領域內一本權威的著作,書中的內容、講授方法、例子和練習既適合課堂教學,又適合讀者自學。無論是高等院校計算機及相關專業的學生,還是業界的從業人員,以及廣大的計算機愛好者,都可從閱讀本書中獲益。

作者簡介

《Cplusplus編程思想》《Cplusplus編程思想》

BruceEckel從1986年至今,已經發表了超過150篇計算機技術文章,出版了6本書(其中4本是關於C++的),並且在全世界做了數百次演講。他是《ThinkinginJava》《ThinkinginC++》《C++Inside&Out》,《UsingC++》《ThinkinginPatterns》的作者,同時還是《BlackBeltC++》文集的編輯。他的《ThinkinginC++》一本書在1995年被評為“最佳軟體開發圖書”,《ThinkinginJava》被評為1999年JavaWorld“最愛讀者歡迎圖書”,並且贏得了編輯首選圖書獎。

目錄

譯者序
前言
第1章對象導言
第2章對象的創建與使用
第3章C++中的C
第4章數據抽象
第5章隱藏實現
第6章初始化與清除
第7章函式重載與默認參數
第8章常量
第9章內聯函式
第10章名字控制
第11章引用和拷貝構造函式
第12章運算符重載
第13章動態對象創建
第14章繼承和組合
第15章多態性和虛函式
第16章模板介紹
附錄A編碼風格
附錄B編程準則
附錄C推薦讀物
索引

書評

在市場上流行的各種計算機語言中,C++的歷史相對較長卻經久不衰,威力強大卻十分難學,"真正的程式設計師用C++"。這些是得到大家公認的。原因是C++語言經過了多年的發展,體系已經比較龐大、完備,語法表現十分靈活,特別是STL被接納為C++標準之後。而語言中的各種要素在各個不同的場合互動作用,許多結果就是發明人自己也未必都能料想的到。
如果你正在攻克這個艱巨的"堡壘",有一本好的C++教材能讓你的學習旅程輕鬆許多。
《ThinkinginC++》(中文版名《C++編程思想》)是美國著名技術作家BruceEckel的傑出作品。此公在美國做了多年的C++語言培訓講師。與之齊名的還有他的另一部著作:《ThinkinginJava》(中文版名《Java編程思想》)。BruceEckel寫作的特點可謂是精益求精:他把整部書稿的電子版全部放在自己的個人站點上,讓全世界的讀者瀏覽、閱讀、評判,這樣每一部付梓的作品都經過了許多次修訂。
《ThinkinginC++》的第一版中譯本早已經由機械工業出版社引入到了國內計算機界,獲得一片好評,被譽為"神奇的C++書籍"。但此書的第二版和第一版相比變化很大,是自1998年C++標準獲得通過後,完全重新書寫的版本,自然裡面也有作者從寫作第一版以來的不少經驗積累。並且,書由原來的一卷分成了兩卷,第一卷IntroductionToStandardC++和第二卷StandardLibraries&AdvancedTopics。這也反映了C++語言的重要進步。所以作者單獨寫了一卷關於C++標準模板庫(STL)的內容。在第一卷中,作者全部套用STL書寫示例代碼,作為內容上的統一和對應。
有幸的是,作為國內計算機圖書出版界的重要力量--機械工業出版社引進了這本書的英文版。確切的說是第一卷,因為據稱第二卷在美國還未出版。本書得到了很多讀者的稱讚是和它的準確定位分不開的。
國內外關於C++語言門類的書籍、著述非常之多,可謂汗牛充棟。有的詳盡全面,可以作為語言手冊,如StanleyB.Lippman的《C++Primer》。有的則深不可測,成為專家級的"大餐",如C++發明人BjarneStroustrup博士的《C++程式設計語言》。
而ThinkinginC++則顯得有些另類,BruceEckel沒有把C++的方方面面都告訴讀者,因為多年的培訓經驗告訴他,就套用級別的開發者來說,學習的"太多、太快"反而是個麻煩,學習者難於抓住重點。比如,如果你不是搞編譯器的話,那就沒必要"背下"那些運算符操作順序(我就做過這樣的傻瓜),使用時加上括弧就足夠了,維護起來也很方便。
所以這本書其實是本著這樣一種理念:充分利用C++語言提供的工具、元素,從C++的角度進行思考,在程式設計中有效的使用C++,而避開C++語言的陷阱、陰暗面。可以說,此書不是一部語言手冊,但卻是一部匯集了許多C++使用經驗的參考資料,值得你反覆的閱讀、體會、咀嚼。
作者根據長期的C++培訓實踐,把他的這一思想主旨劃分成了十幾個作為開發者應該掌握的重點部分,也就是第一卷的十幾個章節。為了讓讀者易於領會,書中的示例程式也儘可能的簡潔。你在閱讀每一章時,就會感覺:章節中涉及的內容要點非常集中,把主題牽扯的技術細節交代的相當透徹,就好像自己不斷的在打一場學習C++語言的"戰役",解決了一個又一個的"知識?"。而作為程式設計師,這種來龍去脈式的對知識的了解很重要也很有效,它避免了你在設計、編寫代碼時孤立的看待事物,從而能領會語言的精髓,靈活的學以致用。正所謂:"知其然,更知其所以然",才能無往而不利。
比較有意思的是書的開頭,作者在第一章後面居然講了近20頁篇幅的軟體分析和設計,其實主要內容就是"極限編程"。個人感覺BruceEckel對傳統的軟體工程在中小軟體項目中的實際作用有反思和警醒:它們不都總是合適的。比如,好些方法常常在計畫階段停留過長,計畫的東西卻沒多大指導意義。因為很多東西實際上無法光憑推測和想像就能確定全部細節,還有的時候不到編碼階段你就無法知道面臨的困難。作者在後面大力推薦極限編程,認為這是一種行之有效的軟體工程手段,並指出了它最主要的兩個特點。有興趣的朋友可以找相應的書籍參閱。
任何技術性的書籍,都必定有它特定的讀者群。為了讓讀者能順利閱讀以及儘快領會,作者一般都會在書的序言部分註明讀者範圍和必須具備的基礎知識。本書自然不例外,作者要求讀者最好已經有了一些實際的編程體驗,特別是最好懂得C語言。作者在此書中還特地加入了"C語言快速入門"這一章(第三章)。我發現,如果讀者不懂C語言,還真的不太容易領會書中的內容。
因為作者在講述C++語言的內容時,經常把此部分在C語言中的內涵和在C++中的語義進行對比,或者乾脆從C講起,逐步演進到C++。比如,從第四章到第五章,你會很清楚的發現class關鍵字的由來-人們為了進一步減少模組間的耦合,把從C語言中的struct加以擴展,加入存取控制和方法,從而演進到class。而在C++中,為什麼頭檔案的重要性變得更加突出,作者也通過對C語言在這方面的不足來加以闡述。
很多使用C++的朋友都知道,ScottMeyers《EffectiveC++》同樣是一本優秀的書籍,裡面50個C++編程條款是專家智慧、經驗的結晶。有人還打了一個比方:C++程式設計師應該分成兩類--讀過《EffectiveC++》的,和沒有讀過《EffectiveC++》的。
而如果你看了《ThinkinginC++》,你就會發現,《EffectiveC++》中的大部分內容都能在書中找到,而且論述更加連貫,內容更加充實。當然,不知道是"英雄所見略同",還是作者進行了下意識的補充。
例如:儘量使用const關鍵字做參數和儘量代替#define宏這一主題,BruceEckel乾脆用了整個第八章來專門論述相關的知識。同樣,還有如何明智的使用inline,在第九章內有詳盡的說明。第十章則是如何利用namespace來防範命名衝突這一軟體開發中的常見問題。說實話,國內幾乎沒有C++教材討論過這一主題,它們所做的事情更多的是講解C++對C的擴展。大概這就是我們的差距吧。
本書的另外一個亮點就是:訣竅很多。編程中不少常見的麻煩事如何解決,在書中都能找到合理的解答。
在一個較大的工程中,往往有許多檔案包含引用其它檔案,這通常引起的麻煩就是:你修改了一個檔案,卻引起了一堆模組的重新編譯。時間上的代價太高,而且不利於模組間"劃清界限",相互牽扯太多。書中提到了一個很簡單卻行之有效的辦法-把頭檔案中的結構定義、對其它類的引用進行剝離,轉移到對應的.cpp實現檔案中,頭檔案中代之以指針聲明。
還有如何有效的控制多個類模組中靜態變數的初始化,作者也提出了兩個解決方案。如果說指針是C語言的精粹的話,那么虛擬函式就可以看作C++的靈魂。C++正是藉助於虛擬函式的妙用,來實現許多強大的功能,這使得人們在軟體設計中對現實世界的描述更加準確,表現更為靈活。不要忘了,大行其道的COM組件編程,和C++中的這些實現其實密不可分。DonBox說得好:COM是更好的C++。
BruceEckel在該書的後面章節,自然不惜筆墨著重論述這些內容。他以模板入門這一章作為本書的結束,估計和他的第二卷專門論述STL-標準模板庫有關。
通讀全書,心情可以用兩個字來表達:舒暢。程式設計中碰見的許多問題,在大腦中都可以找到"取經"的地點,能不爽嗎?當然,這還遠遠不是C++語言的全部,要真正領悟C++還需要進一步的努力和實踐。所以,作者在書的附錄指出了進一步閱讀的推薦書目。
值得一提的是,本書的英文版語言非常流暢、長而複雜且難於理解的語句不多。我在閱讀中經常有欲罷不能的感覺,常常拿起來就放不下了,直到腦海被C++的符號所充斥,再也吸收不進新的東西才肯罷手。大概這是此書的另外一個魅力所在吧。而且,抱著此書,邊看邊做批註和心得,這和在螢幕上閱讀電子版的體驗又有很大不同。當然,對於英文能力不足的朋友來說,閱讀英文版並準確的理解的確是個負擔。期望本書的中文版能翻譯準確且保持流暢的風格

相關詞條

相關搜尋

熱門詞條

聯絡我們