<書籍簡介>
這本書是一本C++的經典之作,為了讓台灣的讀者不會有遺珠之憾,博碩文化特地引進本書,並將之編為《名家名著》系列第05號書籍。兩位作者的來頭都不小(請見作者簡介),而本書更是作者十年磨一劍的經典之作。
作者Koenig在C++的整個發展過程中具有舉足輕重的地位,是C++社群中最受尊敬的大師之一。他的文章以樸實而又精深的思想,準確而又權威的論述,,成為業界公認的『正統C++之聲』。本書命名為《Ruminations on C++》充分顯現出作者的自信和對這本書的珍愛。
本書命名為《C++沉思錄》,顧名思義,這是一本需要多加思考的書籍。作者在書中不斷強調『想一想』這件事,從思考的過程中,逐漸發展出具有實用性的C++程式。就內容來看,這本書其實也可以命名為《C++設計模式》、《Thinking in C++》、《C++及STL的設計和演化》。
這是一本進階書,對於初學C++的人來說並不適合。但對於已經學會C++語法,有過一小段撰寫C++程式經歷的人來說,本書有助於理解要怎樣才算是用對了C++來設計程式、為何C++要如此設計、STL當中的奧秘(例如iterator為何要如此設計)。
在本書的範例程式碼中,作者從簡單的問題開始設計起,逐步擴充解決更多的問題,考慮周詳,並且充分應用了C++特有的功能(相對於Java而言),特別是指標、運算子overload、friend等等的技術,這也是C++之所以複雜龐大的主因,然而既然選擇了C++作為開發工具,並因此付出了更多的學習時間,若不將之應用出來,就太可惜了。讓我們來看看大師是如何充分應用各種C++的技巧來解決問題。
這本書在C++的教學方式上有獨到之妙。作者循循善誘,娓娓道來,所舉的例子雖然小,但是非常典型,切中要害,讓你花費不大的精力就可以掌握相當多的東西。
這本書與坊間大部分的C++書籍都不一樣,那些書所關注的是語言本身,而不是如何運用這種語言。
作者對C++有著居高臨下的見識,對於C++的設計理念和實際應用有非常清晰的觀點。眾多紛繁複雜的C++特性如何組合運用,如何有效運作,什麼是主流,什麼是旁支,哪些是通用技術,哪些是特殊的技巧,在書中都有清晰明白的介紹。
識字最多的人,一定是最好的作家嗎?能演奏最多音符的人,一定是最好的音樂家嗎?那些瞭解最多語言特性的人就是最好的程式設計師(這真是荒謬)。程式設計工作中最困難的部分並不是去學習語言細節,而是理解問題的解決之道。
作者希望讀者能運用這些idea 去理解一堆拼湊的程式碼與一個抽象之間的差別──這種差別,就好像一堆辭藻與一篇文章、一堆音符與一支歌曲的差別一樣。C++支援好幾種不同的抽象形式,其中最著名的有抽象資料型態(ADT)、物件導向程式設計和泛型程式設計。
全書多次強調,C++最基本的設計理念是用類別來表示概念,C++解決複雜性的基本原則是抽象,物件導向思想是C++的手段之一,而不是全部等等。這些言論可以說是擲地有聲,可引導許多C++程式設計師走向正確的道路。
如果你是C++的高手,請試著讀讀本書,看看你能理解多少?多快理解?或許你會發現,原來要掌握博大精深的C++,並非麼簡單。
如果您只是個剛學會C++的程式設計師,相信看完本書後,一定會發出『原來C++可以這樣做啊!』、『原來程式庫是這樣寫的啊!』、『原來遇到問題要這樣解決啊!』等等數不完的讚嘆之聲!
大師的推薦
Koenig和Moo的《C++沉思錄》將會為許多人提供有用的幫助,對於C++究竟是什麼,以及能夠做些什麼,他們的先見之明,在這本書中隨處可見。
——C++發明人 Bjarne Stroustrup
對我來說,這是我所有C++藏書中最好的一本。
——《C & C++ Code Capsules》作者 Chuck Allison
<書籍目錄>
Chapter 0 序幕
Part I 動機
Chapter 1 為什麼我用C++
Chapter 2 為什麼我用C++工作
Chapter 3 生活在現實世界中
Part II 類別和繼承
Chapter 4 類別設計者的查核表
Chapter 5 代理類別
Chapter 6 handle類別:首部曲
Chapter 7 handle類別:二部曲
Chapter 8 一個物件導向的程式範例
Chapter 9 一個課堂練習的分析(上)
Chapter 10 一個課堂練習的分析(下)
Chapter 11 何時不該使用虛擬函數
Part III 樣板(Templates)
Chapter 12 設計容器類別
Chapter 13 存取容器內的元素
Chapter 14 存取容器內的元素
Chapter 15 序列
Chapter 16 作為介面的樣板
Chapter 17 樣板和泛型演算法
Chapter 18 泛型Iterators
Chapter 19 使用泛型Iterators
Chapter 20 Iterator配接器
Chapter 21 函數物件
Chapter 22 函數配接器
Part IV 程式庫(Libraries)
Chapter 23 日常使用的程式庫
Chapter 24 一個程式庫介面的設計實例
Chapter 25 程式庫的設計就是語言的設計
Chapter 26 語言的設計就是程式庫的設計
Part V 技術
Chapter 27 自己追蹤自己的類別
Chapter 28 在叢集中配置物件
Chapter 29 應用器、操縱器和函數物件
Chapter 30 將應用程式庫從輸入輸出中分離出來
Part VI 總結
Chapter 31 透過複雜性獲取簡單性
Chapter 32 說了Hello world之後要再做些什麼
<作者簡介>
關於Andrew Koenig
如果說C++的發明人Bjarne Stroustrup是C++領域的第一把交椅,那麼Andrew Koenig可以說是C++的第二號人物。他不但是Bjarne Stroustrup的好友,也是C++標準委員會的資深專案編輯,換句話說,您現在看到的C++標準,有許多都是經過他的手實作或審定出來的。難能可貴的是,他與Bjarne Stroustrup在C++方面的想法高度一致,這也是C++之所以能夠蓬勃發展的主因之一。
Koenig寫的書不多,但論文與專欄卻很多,比較有名的著作物包含《Accelerated C++: Practical Programming by Example》、(本書)《Ruminations on C++: A Decade of Programming Insight and Experience》、《C++