編輯推薦
大師Stanley代錶作之一,侯捷經典譯作。
將復雜深厚的內容濃縮成基本要素,快速熟悉和瞭解C++的捷徑。
從實際齣發,講求效率,覆蓋能夠幫助解決實際編程問題的特性和技術。
以過程、泛型、基於對象、麵嚮對象四大風格組織,復雜度漸進,便於學習。
海報:
內容簡介
《Essential C++中文版》以四個麵嚮來錶現C++的本質:procedural(麵嚮過程的)、generic(泛型的)、object-based(基於對象的)、object-oriented(麵嚮對象的)。全書圍繞一係列逐漸繁復的程序問題,以及用以解決這些問題的語言特性來組織。循此方式,你將不隻學到C++的功能和結構,也可學到它們的設計目的和基本原理。
《Essential C++中文版》適閤那些已經開始從事軟件設計,又抽不齣太多時間學習新技術的程序員閱讀。
作者簡介
Stanley B.Lippman: 暢銷圖書《C++Primer》作者,其職業是提供關於C++和麵嚮對象的訓練、谘詢、設計和指導。他在成為一名獨立谘詢顧問之前,曾經是迪士尼動畫公司的首席軟件設計師。當他在AT&TBell;實驗室的時候,領導瞭Cfront 3.0版本和2.1版本的編譯器開發組。他也是BjarneStroustrup領導的Bell實驗室Foundation項目的成員之一,負責C++程序設計環境中的對象模型部分。他還撰寫瞭許多關於C++的文章。目前他已受雇於微軟公司,負責VisualC++項目。
侯捷是計算機技術書籍的作傢、譯者、書評人。著有《深入淺齣MFC》《多型與虛擬》《STL源碼剖析》、《無責任書評》三捲,譯有眾多膾炙人口的高階技術書籍,包括Meyers所著的“EffectiveC++”係列。侯捷兼任教職於元智大學、同濟大學、南京大學。他的個人網址是http://www.jjhou.com(中文繁體)和http://jjhou.csdn.net(中文簡體)。
精彩書評
“通過閱讀本書,你可以在很短的時間裏熟悉和瞭解C++。Stanley成功地將復雜深厚的內容濃縮成基本的要素,讓你可以學習到編寫真正程序所需知道的一切。書中涉及大量非常實用的案例分析。”
——Steve Vinoski,IONA
目錄
滿漢全席之外(譯序/侯捷)
前言
結構與組織
關於源代碼
緻謝
更多讀物
排版約定
第1章 C++編程基礎 Basic C++ Programming
1.1 如何撰寫C++程序
1.2 對象的定義與初始化
1.3 撰寫錶達式
1.4 條件語句和循環語句
1.5 如何運用Array和Vector
1.6 指針帶來彈性
1.7 文件的讀寫
第2章 麵嚮過程的編程風格 Procedural Programming
2.1 如何編寫函數
2.2 調用函數
2.3 提供默認參數值
2.4 使用局部靜態對象
2.5 聲明inline函數
2.6 提供重載函數
2.7 定義並使用模闆函數
2.8 函數指針帶來更大的彈性
2.9 設定頭文件
第3章 泛型編程風格 Generic Programming
3.1 指針的算術運算
3.2 瞭解Iterator(泛型指針)
3.3 所有容器的共通操作
3.4 使用順序性容器
3.5 使用泛型算法
3.6 如何設計一個泛型算法
3.7 使用Map
3.8 使用Set
3.9 如何使用Iterator Inserter
3.10 使用iostream Iterator
第4章 基於對象的編程風格 Object-Based Programming
4.1 如何實現一個Class
4.2 什麼是構造函數和析構函數
4.3 何謂mutable(可變)和const(不變)
4.4 什麼是this指針
4.5 靜態類成員
4.6 打造一個Iterator Class
4.7 閤作關係必須建立在友誼的基礎上
4.8 實現一個copy assignment operator
4.9 實現一個function object
4.10 重載iostream運算符
4.11 指針,指嚮Class Member Function
第5章 麵嚮對象編程風格 Object-Oriented Programming
5.1 麵嚮對象編程概念
5.2 漫遊:麵嚮對象編程思維
5.3 不帶繼承的多態
5.4 定義一個抽象基類
5.5 定義一個派生類
5.6 運用繼承體係
5.7 基類應該多麼抽象
5.8 初始化、析構、復製
5.9 在派生類中定義一個虛函數
5.10 運行時的類型鑒定機製
第6章 以template進行編程 Programming with Templates
6.1 被參數化的類型
6.2 Class Template的定義
6.3 Template類型參數的處理
6.4 實現一個Class Template
6.5 一個以Function Template完成的Output運算符
6.6 常量錶達式與默認參數值
6.7 以Template參數作為一種設計策略
6.8 Member Template Function
第7章 異常處理 Exception Handling
7.1 拋齣異常
7.2 捕獲異常
7.3 提煉異常
7.4 局部資源管理
7.5 標準異常
附錄A 習題解答 Exercises Solutions
附錄B 泛型算法參考手冊 Generic Algorithms Handbook
附錄C 中英術語對照 侯捷
英文術語的采用原則
中英術語對照(按字母順序排列)
索引
前言/序言
天啊,這本書竟是如此輕薄短小。我真想大叫一聲“哇歐”!C++ Primer 加上索引、扉頁、謝詞之後,厚達1237頁,而此書卻隻有薄薄276 頁。套句拳擊術語,這是一部“輕量級”作品。
每個人都會好奇這究竟是怎麼迴事。的確,這裏頭有一段故事。
過去數年來,我不斷纏著迪斯尼電影動畫公司(Disney FeatureAnimation)的每一個人,請求讓我親身參與一部電影的製作。我纏著導演,甚至Mickey本人(如果我可以說齣來的話),要求一份管理工作。我會如此瘋狂,部分原因是深陷於好萊塢大屏幕那令人神往的無盡魔力而難以自拔。除瞭計算機科學方麵的學位,我還擁有藝術碩士的頭銜,而電影工作似乎可以為我帶來個人專長的某種整閤。我要求管理工作,為的是從製片過程中獲取經驗,以便提供實際有用的工具。身為一個C++編譯器編寫者,我一直都是自己最主要的用戶之一。而你知道,當你是自己軟件的主力抱怨者時,你就很難再為自己辯護或覺得受到不公平的責難。
《幻想麯2000》(Fantasia2000)片中有一段火鳥(Firebird)的特效鏡頭。其計算機特效指導對於我的加盟頗感興趣。不過,為瞭掂掂我的斤兩,他要求我先寫個工具,讀入為某段場景所攝的原始數據,再由此産生可嵌入Houdini動畫套件中的攝影機節點(cameranode)。當然,我用C++把它順利搞定瞭。他們愛死它瞭,我也因此得到瞭我夢寐以求的工作。
有一次,在製片過程中(在此特彆感謝Jinko 和Chyuan),我被要求以Perl 重寫那個工具。其他的TD並非編程高手,僅僅知道Perl、Tcl 之類的程序語言。(TD是電影界的術語,指的是技術導演。我是這部片子的軟件TD,我們還有一位燈光TD〔你好,Mira〕,一位模型TD〔你好,Tim〕,以及電影特效動畫師〔你好,Mike,Steve,Tonya〕。)而且,喔,天啊,我得趕著點,因為我們想要獲得一些觀念上的實證,而導演(你好,Paul和Gaetan)及特效總監(你好,Dave)正等著結果,準備呈給公司大頭目(你好,Peter)。這雖然不是什麼緊急要務,可是,你知道的……,唉。
這令我感到些許為難。我自信可以用C++快速完成,但我不懂Perl。好吧,我想,我去找本書抱抱佛腳好瞭——前提是這本書不能太厚,起碼此刻不能太厚。而且它最好不要告訴我太多東西,雖然我知道我應該知道每一樣東西,不過暫且等等吧。畢竟這隻是一場錶演:導演們需要一些經過證實的概念,藝術傢需要一些東西協助證實其概念,而製片(你好,heck),她需要的是一天48小時。此刻我不需要全世界最棒的Perl 大全,我需要的是一本能妥善引導我前進,使我不緻偏離正軌過遠的小書。
我找到瞭Randal Schwartz 的LearningPerl,它讓我立即上手並進展神速,而且頗具閱讀趣味。不過,就像其他有趣的計算機書籍一樣,它也略去瞭不少值得一讀的內容——盡管在那個時間點,我並不需要瞭解所有內容,我隻需要讓我的Perl程序乖乖動起來。
我終於在感傷的心境中明白,C++ Primer第三版其實無法扮演人們在初學C++時的導師角色。它太龐大瞭。當然,我還是認為它是一本讓我驕傲的巨著——特彆是由於邀請到JoséeLajoie 共同完成。但是,對於想立刻學會C++程序語言的人來說,這本巨著實在過於龐大復雜。這正是本書的由來。
你或許會想,C++又不是Perl。完全正確!本書也非LearningPerl,它談的是如何學習C++。真正的問題在於,誰能夠在散盡韆頁篇幅之後,猶敢自稱教導瞭所有的東西呢?
1.精細度。在計算機繪圖領域中,精細度指的是影像被描繪齣來的鮮明程度。畫麵左上角那位騎在馬背上的匈奴人,需要一張看得清楚眼睛的臉、頭發、五點鍾方嚮的影子、衣服……。匈奴人的背後——不,不是那塊岩石,老天——唔,相較之下無關緊要。因此我們不會以相同的精細度來描繪這兩個影像。同樣道理,本書的精細度在相當程度上做瞭降低。依我看,C++Primer 除瞭在運算符重載(operatoroverloading)方麵的實例討論稍嫌不足外,可說極其完備瞭(我敢這麼說是因為Josée 也有一份功勞)。但盡管如此,C++Primer 還花瞭46 頁篇幅討論操作符重載,並附上瞭範例,而本書卻僅以兩頁帶過。
2. 語言核心。當我還是C++ Report的編輯時,我常說,雜誌編輯有一半工作花在決定哪些題材應該放入,哪些不要。這句話對本書一樣成立。本書內容是圍繞在編程過程中所發生的一係列問題組織的。我介紹編程語言本身的特性,藉此來為不同的問題提供解決之道。書中並未述及任何一個可由多繼承或虛繼承解決的問題,所以我也就完全沒有討論這兩個主題。然而,為瞭實現iteratorclass,我必須引入嵌套類型(nested type)。Class的類型轉換操作符很容易被錯用,解釋起來也很復雜,所以我不打算在書中提到它。諸如此類。我對題材的選擇以及對語言特性的呈現順序,歡迎大傢指教批評。這是我的選擇,也是我的職責。
3. 範例的數量。C++ Primer 有數百頁代碼,巨細糜遺,其中甚至包括一套麵嚮對象的(ObjectOriented)文本檢索係統,以及十個左右的完整class。雖然本書也有代碼,但數量遠不及C++Primer。為瞭彌補這項缺憾,我將所有習題解答都置於附錄A。誠如我的編輯DeborahLafferty所言,“如果你想提高教學速度,唾手可得的解答對於學習的強化極有幫助。”
結構與組織
本書由七章和兩份附錄構成。第1章藉著撰寫一個具有互動性質的小程序,描繪C++語言預先定義的部分。這一章涵蓋瞭內置的數據類型、語言預定義的運算符(operator)、標準庫中的vector和string、條件語句和循環語句、輸入和輸齣用的iostream 庫。我之所以在本章介紹vector和string這兩個class,是因為我想鼓勵讀者多多利用它們取代語言內置的數組(array)和C-style 字符串。
第2 章解釋函數的設計與使用,並逐一查看C++函數的多種不同風貌,包括inline 函數、重載(overloaded)函數、function template,以及函數指針(pointers to functions)。
第3 章涵蓋瞭所謂的Standard TemplateLibrary(STL):一組容器類(包括vector、list、set、map,等等)、一組作用於容器上的泛型算法(包括sort()、copy()、merge(),等等)。附錄B按字典順序列齣瞭最廣為運用的泛型算法,並逐一附上瞭使用實例。
身為一個C++程序員,你的主要任務便是提交class 以及麵嚮對象的class 層次體係。第4 章將帶領你親身瞭解class機製的設計與使用過程。在這個過程中,你會看到如何為自身的應用係統建立起專屬的數據類型。第5章介紹如何擴展class,使多個相關的class 形成族係,支持麵嚮對象的class層次體係。以我在夢工廠動畫電影公司(DreamworksAnimation)擔任顧問的經驗為例,那時我們設計瞭一些class,用來進行四個頻道影像閤成之類的工作。我們使用瞭繼承和動態綁定(dynamicbinding)技術,定義影像閤成所需的class 層次體係,而不隻是設計八個獨立的class。
第6 章的重頭戲是class template,那是建立class 時的一種先行描述,讓我們得以將class用到的一個(或多個)數據類型或數據值,抽離並參數化。以vector 為例,可能需要將其元素的類型加以參數化,而buffer的設計不僅得將元素類型參數化,還得將其緩衝區容量參數化。本章的行進路綫圍繞在二分樹(binary tree)classtemplate 的實現上。
最後一章,第7 章,介紹如何使用C++的異常處理機製(exception handlingfacility),並示範如何將它融入標準庫所定義的異常體係中。附錄A 是本書習題解答。附錄B提供瞭關於最廣為運用的一些泛型算法的相關討論與使用實例。
關於源代碼
本書的所有程序,以及習題解答中的完整代碼,都可從網上獲得。你可以在Addison Wesley Longman的網站(www.awl.com/cseng/titles/0-201-48518-4)或我的個人首頁(www.objectwrite.com)中取得。所有程序均在VisualC++ 5.0 環境中以Intel C++編譯器測試過,也在Visual C++ 6.0 環境中以MicrosoftC++編譯器測試過。你或許需要稍微修改一下代碼纔能在自己的係統上編譯成功。如果你需要做一些修改並且做瞭,請將修改結果寄一份給我(slippman@objectwrite.com),我會將它們附上你的大名,附於習題解答代碼中。請注意,本書並未顯現所有代碼。
緻謝
在這裏,我要特彆感謝C++ Primer 第三版的共同作者JoséeLajoie。不僅因為她為本書初稿提供瞭許多深入見解,更因為她在背後不斷地給我鼓舞。我也要特彆感謝Dave Slayton以他那犀利的綠色鉛筆,徹底審閱瞭文本內容與程序範例。Steve Vinoski則以同情但堅決的口吻,為本書初稿提供瞭許多寶貴意見。
特彆感謝Addison-Wesley 編輯團隊:全書編輯Deborah Lafferty 從頭到尾支持這個項目;審稿編輯BestyHardinger 對本書文字的可讀性貢獻最大;産品經理John Fuller 帶領我們把一堆文稿化為一本完整的圖書。
撰寫本書的過程中,我同時還擔任獨立顧問工作,因此必須兼顧書稿和客戶。感謝我的客戶對我如此體諒和寬容。我要感謝ColinLipworth、Edwin Leonard、Kenneth Meyer,因為你們的耐心與信賴,本書纔得以完成。
更多讀物
內舉不避親,我要推薦C++書籍中最好的兩本,那便是Lippman 與Lajoie 閤著的C++Primer,以及Stroustrup 的著作The C++ Programming Language。這兩本書目前均為第3版。我會在本書各主題內提供其他更深入的參考書目。以下是本書的參考書目。(你可以在C++ Primer 和The C++Programming Language 中找到更廣泛的參考文獻。)
[LIPPMAN98] Lip
Essential C++中文版 epub pdf mobi txt 電子書 下載 2024
Essential C++中文版 下載 epub mobi pdf txt 電子書