-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

寫給大忙人看的C++

( 簡體 字)
作者:盧濤,李穎類別:1. -> 程式設計 -> C++ -> C++
譯者:
出版社:電子工業出版社寫給大忙人看的C++ 3dWoo書號: 42325
詢問書籍請說出此書號!

缺書
NT售價: 545

出版日:8/1/2015
頁數:604
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121268618
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

譯 者 序


這是我翻譯的第3本C++方面的書籍。C++對我來說有著特殊的意義,我在大約20年前首次接觸了它,當時便被它的優雅和高效深深吸引,因此在工作后改變了自己的專業,并在13年前開始用它編寫實用軟件。C++陪伴了我這么多年,其思想已經融入我的頭腦中,也許我一生都不會忘記。
從我的這段經歷不難看出,C++是一門已經不再年輕的語言,但它這么多年來一直在默默地創建著各種系統和應用軟件,以至于在這個移動互聯的年代,它依然健在,而當年同樣紅火的一些編程語言早已消失不見。C++保持活力的原因在于它的不斷發展,每一代新的標準都增加了程序員盼望已久的許多功能。例如從最早的帶類的C語言,到面向對象編程,再到擁有龐大的類庫和標準模板庫的泛型編程。它還吸收了其他語言的特點,例如C++11引入的基于范圍的for循環、lambda函數和正則表達式,這些改變使它變得越來越好用。語言的變遷也改變了我們編寫程序的方式,過去在循環中后綴運算符很常見,現在首選的卻是前綴運算符;另外,引用除了用作左值,還能用作右值,讀過本書你就會發現其中的奧妙。
有人曾提議把C++當作一門全新的語言,我對此不能認同。有C語言基礎對于學會C++、Java、JavaScript等類似的語言都很有幫助,本書也用了幾章篇幅講述C語言的字符串、I/O、時間等函數,這是很有必要的。使用一種工具的目的就是用它來解決問題,而我們則不能被工具所束縛;為了面向對象而非把簡單的問題復雜化是不可取的,所以能用C++的C子集完成的工作盡管用它去做就好了。
每個人在編程中用到的功能總是有限的,但全面了解一門語言的功能對于防止犯類似于重復造輪子的錯誤還是很有必要的;雖然看書需要花費我們一定的時間,但總比將來花費時間來做無謂的事強。正所謂磨刀不誤砍柴工,我建議讀者和我一樣通讀本書,不一定非要記得某些復雜的語法或冗長的參數,只要了解有什么功能存在就好;具體用時可參考軟件聯機幫助文檔,也可以回頭再參考本書。如同C++開發工具這樣的大型軟件是許多聰明人的勞動結晶,我們只需站在他們搭好的平臺上編寫自己業務需要的應用程序,實在不能利用已有功能時才建議考慮自己開發,比如特定的算法或接口。
本書作者主持了微軟Visual Basic設計項目,參與了Visual C++設計項目;前者是史上第一款Windows下的快速開發工具,后者則是C++的實現。不用多說,本書作者知道C++用戶最需要掌握的是什么。
感謝電子工業出版社博文視點資訊有限公司的張春雨編輯選擇我們翻譯本書,感謝符隆美編輯,她從專業的角度對譯文進行了把關,并做了許多潤色,使之更具可讀性。
感謝李綠霞、盧林、陳克非、李洪秋、張慧珍、李又及、盧曉瑤、陳克翠、湯有四、李陽、劉雯、賈書民、蘇旭暉對本書的翻譯工作所做的貢獻。
還要感謝我的兒子盧令一小朋友,他知道我在翻譯書稿就常常自己安靜地讀書和玩耍,放棄了很多出去玩的機會,讓我能夠專注于本書的翻譯,本書的出版也有他的一份功勞。
最后希望本書對讀者有幫助。由于譯者經驗和水平有限,譯文中難免有不妥之處,懇請讀者批評指正!

盧濤
2015年5月19日



前 言


恭喜你!有了本書,你就擁有了最快和最簡單的途徑來學習最新、最先進的C++功能,尤其是新的C++11規范中的功能和最近幾年增加的其他功能。
新技術一旦被解釋清楚,便不難被人理解。但一些概念起初是如此抽象和陌生,令你花費幾周苦苦研究,都不得要領。有太多描述(雖然是知識淵博的專家寫的)都無法突破概念的屏障,使得學習新的知識非常困難。
我編寫本書的部分原因在于讓你免受這成年累月的挫折,學習本書應該不難。
通過本書能使你快速地隨時調閱所有的C++功能(或至少大多數功能),從語言的最基本的組成部分開始,直至C++庫的精致用法。
本書與眾不同之處:學習C++11
鄭重聲明,本書是學習最新、最高級功能的最快、最簡單的途徑,有多種技術支持。
易于理解的幾十幅圖。有時一幅圖勝過千言萬語。
簡單而相關的例子。許多或大部分編程書籍的部分編寫目的是讓讀者信服作者有多聰明,我寫本書的目的卻是讓你覺得自己很聰明,這意味著本書列舉的都是簡單而易于消化的例子。
經常使用的語法圖解,一目了然的語法總結。
對重要概念的簡單解釋,但解釋程度只限于理解“為什么一個功能被加入C++,以及如何使用它”。
本書的受眾
本書適合想認真學習和使用C++的讀者。
對于高級初學者:如果你之前沒有學過任何編程語言,那么你需要老師的額外幫助或(至少)學習一本更基礎的教材。而第1章及每章的示例應用程序都將對初學者尤其有幫助。
對于中級和高級程序員:無論你的水平有多高,你都很可能還在加快速度學習至少一部分更新、更先進的C++特性,特別是C++11。如果是這樣的話,那么這本書便是為你準備的。
對于所有程序員:與其他書籍不同,本書對每種運算符和C++庫中的每個函數、類和對象,都提供了簡單明了的解釋,包括如下內容。
- 語法概要,顯示一目了然的參數和類型。
- 一個對每個函數、對象或運算符的功能的簡要說明。
- 一個簡短的說明性的例子(在重要的地方采用較長的例子)。
例題和習題
在學習新技術時,擁有合適的例子往往可發揮重要的作用。因此,除了為每個單獨的函數和運算符提供簡短的例子,我還在大多數章節的末尾提供了一個或兩個完整的程序——示例應用程序。
所有這些程序都做了一些有趣或有用的事情,包括有趣的游戲和謎題。我之所以選擇這些示例應用程序,是因為它們大量使用了所在章節的主流技術,同時易于理解。
因為本書是參考書而不是初學教材,所以我并沒有每隔一頁就安排一個練習。不過,我的確在每個示例應用程序后面安排了一些練習。這些練習都分別被分級和編號,從容易的練習開始,并逐漸進入到更實際的挑戰中。
最好的學習方法是實踐,我希望你完成書中的練習。如果你能完成所有的練習,那么你可以認為自己是一名相當專業和成功的C++程序員了!
你可以訪問網址informit.com/title/9780321888020找到這些練習的答案(雖然在你至少嘗試自己解決問題之前查看它是自欺欺人)。你可以訪問網站brianoverland.com,找到我的其他書籍的資料。
對C++版本的要求
C++可能是現在最流行的編程語言,雖然有適用于特定平臺(如C#、Java和Objective C)的其他優秀工具,但C++作為編寫和維護正式的獨立應用程序的最重要的通用語言,仍然居于首要位置。
在C++推出后的最初幾年,編譯器廠商加入了重要的新功能。本書假設你的編譯器支持下面所列的全部功能。
模板:此功能有助于代碼重用,從而使你不必重復地解決同樣的一般性問題。
標準模板庫(STL):提供靈活的容器及可重用的搜索、排序和數據處理程序,無論你處理的是什么數據類型,這些都可能為你節省顯著的工作量。
字符串類:仍然支持經典的C字符串類型,但STL的string類比舊式的以null結尾的C字符串類型更易用、更安全,使用更方便。
專門的類型轉換操作符:這些有助于產生更可靠、更易于調試的程序。
結構化異常處理:這是一種高級的處理錯誤的方式,雖然它主要在程序員編寫數千行源代碼時起作用。
本書并不(not)假設你的編譯器支持C++11規范的所有新功能。在撰寫本書時,主要的編譯器廠商如微軟,也尚未支持一些新的功能,但其很快就會支持這些新的功能。
為了使本書更容易使用,我清楚地標注了所有用到了C++11規范的章節。本書的其他部分(未標注C++11)的代碼應該都能在過去的幾年里出現的任何專業級編譯器上運行。
C++11
雖然本書并沒有假設你的編譯器支持C++11規范的所有功能,但如果你的編譯器支持一些或者全部新的功能,那將很有用。
從C++的早期版本遷移到C++11是一個很大的進步。盡管新規范與過去的C++版本向后兼容,但它在軟件開發領域開辟了令人興奮的新的可能性。
本書探討了C++11的所有重要的新領域。
移動語義:只要有可能,C++庫會充分利用新技術來用移動(move)取代復制操作。二者的差異類似于把驅動器內部的一個文件夾里的文檔移動到另一個文件夾,而不是復制它。你可能已經注意到了,在文件夾之間的移動幾乎是瞬時完成的,而復制可能需要一段時間。
現在,對于自己的程序內的數據可以獲得同樣的性能改進。有時復制是不必要的,而且數據傳輸(或移動)要快得多。移動語義(move semantics)往往可以讓你的程序加速,而無須你進行任何操作。但是,你可以通過在自己的類中利用移動語義來進一步優化程序,如附錄A中解釋的。
lambda函數:傳統的編程技術需要你在一個地方定義某個函數,并在另一個地方調用它,這在大多數時候是很方便的,但有時通過在所有的源代碼中搜索來找到函數的定義卻很不方便。使用lambda技術能夠讓你在使用一個函數時定義它,這種技術的使用可以非常方便。
改進的類的聲明的語法:聲明類是C++最重要的能力之一。雖然C++的推出已經有一段時間了,但直到現在,做到某些事情仍然比預期的更加困難。C++11提供了顯著改進的語法,如派生類的繼承構造函數和更方便的指定默認值的方法。
C++庫的擴展功能:C++11標準庫帶來了許多新的功能,包括一個全功能的正則表達式庫,它提供了搜索、匹配和替換文本模式的強有力的工具;還提供了許多其他新功能,包括改進的隨機技術和無序(散列表)容器。這些容器雖然失去了以一種有意義的次序遍歷元素的能力,卻為數據庫應用程序和數據字典提供了快得多的查找速度。這是C++11可以顯著提高程序性能的另一種方式。
智能指針:指針是C++語言的一個重要組成部分,它們在本書中得到了自己應有的地位;但利用智能指針,應用程序可以變得更正確,更容易管理,因為它們在離開作用域時會自動釋放內存。本書完整描述了新的shared_ptr和unique_ptr究竟是如何工作的。
核心語言改進:C++11提供了一系列核心語言改進,如以范圍為基礎的for語句,從而降低了出錯的概率,并且比標準的for語句更簡捷。基于范圍的for語句利用了每個容器內置的開始位置和結束位置的知識。C++11還提供了其他方面的改進。
正如Bjarne Stroustrup針對C++11所說的,它實際上是“一種全新的語言”。學習新功能將使你做出更高質量、更高效率的完美程序。隨著時間的推移,你會發現,這些獎勵多倍償還了學習這些新功能所付出的努力。
附錄B更詳細地描述了這些新功能。
附錄C按照十進制值和十六進制值呈現了ASCII碼。
學習面向對象
本書明確列出了C++中類和對象的結構,并在需要理解相應技術的地方講解了計算機科學的概念。
如果你想更深入地探討面向對象和C++的背景知識,我則推薦Bjarne Stroustrup撰寫的The C++ Programming Language(Addison Wesley, 2013),這本書雖然很厚,卻是一個很好的資源。
還有其他教科書試圖更深入地教授如何“以對象的方式思考”,但本書也涵蓋了這些基本概念。由Stanley B. Lippman、Josee Lajoie和Barbara E. Moo合著的C++ Primer, Fifth Edition(Addison Wesley, 2013)是一本很好的入門書。
如果你真的是完全從頭學起的,沒有任何C、C++或C族語言背景,那么我謙虛地推薦自己寫的書——C++ Without Fear, Second Edition(Prentice Hall, 2011)。
印刷約定
我發現,只要語法總結的排版約定不失控,那么這些約定就是有幫助的。在本書中,我堅持輕量級地利用這些約定,見表P.1。
表P.1 約定
風 格 描 述
關鍵字 關鍵字和標點符號以粗體字表示的用意是要準確地按照顯示進行輸入。需要注意的是,C++是區分大小寫的,所以,對于關鍵字if,要把“if”而不是“If”或“IF”輸入到你的程序代碼中
占位符 占位符以斜體字(注:漢字用楷體)表示這是你提供的項目。通常,它們是你選擇的函數、類或變量名,可以是更復雜的內容,如整個語句
[可選] 有時,我用方括號(不加粗)來表示一個可選的項目。在這種情況下,方括號不表示其字面含義,而是由你來選擇是否將項目包括在內。
然而,粗體格式的括號表示其字面含義,而在這種情況下,我提到它們就是指它們原來的含義
項目,項目…… 省略號表示可以重復任意次數的項目(請注意,逗號是字面上的含義,但省略號不是)
在本書中,我在顯示語法時廣泛使用了粗體和斜體,只是偶爾用方括號來表示可選項,因為這些都可能與字面上的括號發生混淆,但在正文中始終澄清我打算如何使用它們。
下面是從第2章中提取的這些語法約定的一個例子:
[符號]數字.數字E指數
在這個例子中,小數點(.)和E字面上等都以粗體字體顯示。每一組數字(digits)都是0∼9序列中的數字,指數(exponent)同樣是一系列數字。所有這些都是你提供的數值字符串。方括號(在這個例子中不以粗體顯示)表明符號(sign)是一個可選的減號(-),它可以出現也可以不出現。
結束語
愛麗絲跟著白兔掉進兔子洞時,一開始因遇到陌生的人與動物而驚慌失措。在學習新概念時也容易讓人驚慌失措。你會擔心,一旦自己離開了安靜的花園和客廳這樣的舒適自在的環境,在遇到言論古怪且邏輯奇特的人物時該怎么辦。
你可能會自問:身后熟悉的世界出了什么問題?但我希望你像愛麗絲一樣發現自己在仙境。
就個人而言,我覺得這次閱讀之旅應該永遠有趣甚至好玩。由于本書是一本參考書,對于其中的一些章節,你不必從頭讀到尾,可以像讀一本百科全書那樣選讀自己感興趣的內容,新技術部分的內容也可以作為你回過頭來反復參考的教材。總之,我希望它們傳達一種既有用又有趣的感覺,這也是我所認為的。
你可能會像我一樣不耐煩:有太多東西要學,卻只有很少的時間去學習。我知道自己像愛麗絲的小白兔,希望一下子就了解我看到的所有東西,這樣我就可以使用新的工具快速到達目的地,我不想置身事外試圖弄明白自己在做什么。
C++11幾乎是一種新的語言,盡管它是向后兼容的。學習一門新語言(繼續用“愛麗絲夢游仙境”的比喻)就像殺死神秘的炸脖龍(Jabberwocky)。這是一頭奇怪的異想天開的多頭野獸,它看起來仿佛很龐大而不可征服,但只要合適的長劍在手,你就不應該害怕。你早已在見到它之前就完成了探索,然后你就可以想象我在念道:
“And, hast though slain the Jabberwock?
你已除卻流言蜚語了吧?
Come to my arms, my beamish boy!
春風得意的孩子,快與我擁抱!
Oh frabjous day! Callooh! Callay!
啊,多么快樂!不必躲避!重見天日!
He chortled in his joy.
他抿嘴偷笑。”


致 謝


本書得到了一些非常有才華的人士的幫助,這是我以往從事過的任何項目所無法比擬的。首先,本書是編輯Peter Gordon與我有同樣的遠見的結果,若沒有他的支持和鼓勵,本書就不會出版。
我很幸運地得到了在微軟工作的一些聰明人的援助。Herb Sutter和Marian Luparu提供給我所需要的軟件及寶貴的指導。Stephan T. Lavavej提供的對STL的見解(STL真的是他的姓名的首字母,以及他的專業領域!)(譯者注:他的個人網站網址是http://nuwen.net/stl.html)大幅度提高了本書的價值。微軟退休員工、專利持有人,以及Word拼寫檢查的合著者John R. Bennett,提出了有關lambda表達式和正則表達式的一些問題,這使我能夠把相應的章節寫得更好。Ken Nichols是微軟最具技術頭腦的專家之一,也審閱了本書。他們都不計任何酬勞地給我建議和幫助,感謝是我最起碼應該做的事,盡管這個回報微乎其微。
感謝Daveed Vandevoorde和Seve Vinosky提供了精湛的技術審查,他們雖然要檢查大量的材料,卻表現得非常出色。
最后,我要感謝這支優秀的編輯團隊,他們對時而發脾氣的作者展示了耐心、靈活性和善良,他們的名字是:Kim Boedigheimer、Caroline Senay、Audrey Doyle和Alan Clements。Alan設計的封面是如此特別,它使我對本書正文做出改變,以與封面藝術主題相匹配,這是我從來沒有做過的事情。


作者簡介


憑借在技術上的造詣和對學員進行培訓的長期經驗,Brian Overland是唯一有資格編寫簡化復雜概念的書的作者。他在20世紀80年代就開始從事C語言編程,服務于被全球各地使用的軟件驅動的灌溉系統。他在編寫電影和戲劇評論時,還在社區學院教授編程和英語作文。在微軟,他花了十年從測試人員和技術支持專家晉升到項目負責人及經理。作為Visual Basic 1.0的項目負責人,他為世界帶來了方便的Windows編程技術,并在解釋它的用法等方面起到了關鍵的作用,他也是Visual C++團隊的一員。從那時起,他編寫了許多成功的書籍,并創辦了自己的高科技公司。
內容簡介:

本書全面介紹了C++語言知識,既提供了學習C++語言最新功能的捷徑,也為快速找到特定問題的答案提供了便利。本書簡明地描述了C++核心語言和標準庫中幾乎所有的函數、對象和運算符,一目了然地顯示了語法、結構和重要函數的信息,內容組織形式便于快速查找信息。本書精選了實用的例子來深入地講解概念,還提供了富有挑戰性的練習及參考答案,便于讀者舉一反三,鞏固所學的知識。本書涵蓋了C++11的新特性,包括:lambda表達式、右值引用、正則表達式庫、隨機庫、散列表容器、智能指針等。

目錄:

第1章 C++基礎 1
1.1 組成C++程序的元素 1
1.1.1 #include指令 2
1.1.2 using語句 2
1.1.3 main函數 3
1.2 處理“閃爍的控制臺一閃而過” 4
1.3 使用Microsoft Visual Studio 4
1.4 使用C++執行更多的操作 5
1.5 添加簡單的變量聲明 7
1.6 介紹C++控制結構 9
1.6.1 使用“if”做判斷 9
1.6.2 使用“while”循環 11
1.7 C++程序的一般結構 12
1.8 關于命名空間的更多內容 13
1.9 關于注釋的一些解釋 15
1.9.1 C++注釋(行注釋) 15
1.9.2 C語言風格的注釋 15
1.10 示例應用程序:加法機 16
練習 17
1.11 示例應用程序:計算phi 18
練習 20
第2章 數據 21
2.1 聲明簡單變量 22
2.2 基本數據類型 23
2.2.1 整數類型:準則 24
2.2.2 浮點類型:準則 25
2.3 符號名(符號) 25
2.4 字面量 26
2.5 混合數值類型 29
2.5.1 整數與浮點數 29
2.5.2 布爾型與整型 30
2.5.3 有符號整數與無符號整數 30
2.6 字符串和字符字面量 33
2.6.1 單引號字符 33
2.6.2 雙引號字符串 34
2.6.3 特殊字符(轉義序列) 36
2.6.4 寬字符串 39
2.6.5 原始字符串字面量(C++11) 40
2.7 數據聲明:完整的語法 40
2.8 枚舉類型 43
2.9 特殊聲明(typedef、auto、decltype) 45
2.9.1 typedef關鍵字 45
2.9.2 auto和decltype關鍵字(C++11) 46
2.10 示例應用程序:類型提升 47
練習 48
第3章 運算符 49
3.1 優先級、結合性及左值 49
3.1.1 優先級 49
3.1.2 結合性 50
3.1.3 左值 50
3.2 運算符的簡明概述 51
3.3 運算符的詳細信息 53
3.3.1 范圍運算符 53
3.3.2 數據訪問及其他高優先級的運算符 54
3.3.3 前綴運算符 55
3.3.4 指向成員的指針運算符 58
3.3.5 乘法和除法 59
3.3.6 加法和減法 60
3.3.7 移位運算符 60
3.3.8 小于和大于 61
3.3.9 測試相等 62
3.3.10 位運算和邏輯連詞 63
3.3.11 條件運算符 64
3.3.12 賦值運算符 64
3.3.13 throw運算符 67
3.3.14 連接運算符 67
3.4 善惡之爭:后綴或前綴 67
3.5 位運算符的詳細信息 68
3.5.1 按位與、或、異或 68
3.5.2 對有符號數和無符號數的操作 69
3.5.3 按位移位 71
3.6 類型轉換運算符 71
3.6.1 static_cast運算符 72
3.6.2 reinterpret_cast運算符 73
3.6.3 const_cast運算符 74
3.6.4 dynamic_cast運算符 75
3.6.5 C語言的類型轉換 76
3.7 示例應用程序:打印輸出二進制基數 76
練習 78
第4章 控制結構 80
4.1 C++語句的簡明概述 80
4.2 空語句和表達式語句 82
4.3 復合語句 83
4.4 if和if-else語句 84
4.5 while和do-while語句 86
4.6 for語句 87
4.7 基于范圍的for語句(C++11) 89
4.8 switch語句 90
4.9 跳轉語句(break、continue、goto) 92
4.10 異常處理(try、catch) 94
4.10.1 什么是異常 94
4.10.2 try-catch代碼塊:常規語法 95
4.10.3 catch塊和異常對象 96
4.10.4 拋出一個異常 97
4.11 示例應用程序:猜數字游戲 98
練習 99
4.12 示例應用程序:計算機猜數字 100
練習 102
第5章 函數 103
5.1 傳統的(命名)函數概述 103
5.1.1 函數原型與定義 104
5.1.2 原型化一個函數(簡化的語法) 105
5.1.3 定義函數 105
5.1.4 調用函數 107
5.2 局部和全局變量 107
5.3 完整的函數聲明語法 109
5.4 函數重載 111
5.5 帶有默認值的參數 112
5.6 可變長度參數列表 113
5.7 lambda函數或匿名函數(C++11) 115
5.7.1 lambda函數的基本語法 116
5.7.2 lambda函數的閉包語法 117
5.7.3 mutable關鍵字 120
5.7.4 將lambda表達式與STL連用 120
5.7.5 存儲和返回lambda函數 122
5.8 constexpr函數(C++11) 124
5.9 示例應用程序:骰子的概率 125
練習 127
第6章 指針、數組和引用 129
6.1 引用 129
6.1.1 引用參數 129
6.1.2 從函數中返回一個引用 132
6.1.3 用“const”修飾的引用 132
6.2 數組 133
6.2.1 簡單的(一維)數組 134
6.2.2 數組處理與循環 135
6.2.3 向函數傳遞數組 136
6.2.4 多維數組 137
6.3 指針 139
6.3.1 指針的概念 139
6.3.2 將指針作為參數 141
6.3.3 用于訪問數組的指針 142
6.3.4 指針運算 145
6.3.5 指針與數組參數 145
6.3.6 指針和內存分配 146
6.3.7 指向const類型的指針 148
6.3.8 對指針本身應用const 150
6.3.9 void指針(void *) 151
6.4 涉及指針的復合聲明 152
6.5 傳遞和返回函數指針 155
6.6 智能指針(C++11) 156
6.6.1 shared_ptr模板 157
6.6.2 unique_ptr模板 160
6.7 示例應用程序:埃拉托色尼篩 162
練習 163
第7章 類與對象 165
7.1 概述:結構、聯合和類 165
7.2 基本的類聲明語法 166
7.2.1 聲明和使用一個類 167
7.2.2 數據成員訪問(公有、私有、保護) 168
7.2.3 定義成員函數 170
7.2.4 調用成員函數 173
7.2.5 私有成員函數 175
7.2.6 包含類的類 175
7.2.7 靜態成員 177
7.3 構造函數 179
7.3.1 默認構造函數 180
7.3.2 重載的構造函數和轉換函數 182
7.3.3 復制構造函數 183
7.3.4 構造函數初始化列表 184
7.3.5 委托構造函數(C++11) 187
7.3.6 默認成員初始化(C++11) 188
7.4 析構函數 188
7.5 隱藏的this指針 189
7.6 運算符函數(運算符重載) 190
7.6.1 將運算符函數作為成員 191
7.6.2 作為友元的運算符函數 192
7.6.3 賦值運算符 194
7.6.4 函數調用運算符 195
7.6.5 下標運算符 196
7.6.6 遞增運算符和遞減運算符 197
7.6.7 傳入和傳出轉換函數 198
7.7 派生類(子類化) 199
7.7.1 子類語法 200
7.7.2 基類訪問說明 201
7.7.3 繼承的構造函數(C++11) 202
7.7.4 向上強制類型轉換:子對象和基類指針 203
7.7.5 虛函數和重載 205
7.7.6 純虛函數 207
7.7.7 override關鍵字(C++11) 207
7.7.8 解決層次結構中的名字沖突 208
7.8 位字段 209
7.9 聯合 211
7.9.1 命名聯合 211
7.9.2 匿名聯合 213
7.10 示例應用程序:打包的布爾 213
演習 216
第8章 預處理器指令 217
8.1 預處理器指令的常規語法 217
8.2 預處理器指令小結 218
8.3 使用指令來解決具體問題 221
8.3.1 用#define創建有意義的符號 221
8.3.2 用#define創建宏 223
8.3.3 條件編譯(#if、#endif等) 224
8.4 預處理器運算符 226
8.5 預定義宏 227
8.6 創建項目頭文件 229
第9章 創建和使用模板 231
9.1 模板:語法和概述 231
9.2 函數模板 233
9.2.1 單參數的函數模板 233
9.2.2 處理類型歧義 235
9.2.3 有兩個參數的函數模板 235
9.3 類模板 237
9.3.1 簡單的類模板 238
9.3.2 實例化類模板 239

9.4 類模板與成員函數 240
9.4.1 類模板與內聯成員函數 240
9.4.2 具有獨立函數定義的類模板 241
9.5 使用整型模板參數 242
9.6 模板專門化 243
9.7 可變參數模板(C++11) 245
9.7.1 更復雜的可變模板 247
9.7.2 可變參數模板規則概述 248
9.7.3 元組 249
9.8 示例應用程序:類型提升 250
練習 251
第10章 C-字符串庫函數 252
10.1 C-字符串格式概述 252
10.2 使用C-字符串輸入和輸出 254
10.3 C-字符串函數 255
10.4 用strtok對字符串標記化 260
10.5 單字符函數 261
10.6 內存塊函數(memcpy等) 264
10.7 寬字符函數(wstrcpy等) 266
第11章 C I/O庫函數 268
11.1 C I/O庫概述 268
11.2 控制臺I/O函數 269
11.3 打印/掃描格式 272
11.3.1 printf格式說明符(%) 272
11.3.2 高級printf格式的語法 274
11.3.3 將格式說明符與scanf函數配合使用 276
11.4 輸入和輸出字符串 278
11.5 文件I/O 279
11.5.1 打開文件 280
11.5.2 關閉文件 282
11.5.3 讀取和寫入文本文件 282
11.5.4 讀寫二進制文件 284
11.5.5 隨機訪問函數 286
11.5.6 其他文件管理函數 287
第12章 數學、時間和其他庫函數 289
12.1 三角函數 290
12.2 其他數學函數 292
12.3 C語言的日期和時間庫 294
12.3.1 日期和時間函數 295
12.3.2 TM(“Time”)數據結構 298
12.3.3 日期/時間格式說明符(strftime) 299
12.4 從字符串到數字的轉換 302
12.5 內存分配函數 304
12.6 標準C隨機函數 305
12.7 查找和排序函數 306
12.7.1 bsearch函數(二分查找) 307
12.7.2 qsort函數(快速排序) 308
12.7.3 使用C字符串的比較函數 310
12.8 其他標準C庫函數 310
12.9 示例應用程序:智障學者 312
練習 314
第13章 C++的I/O流類 315
13.1 C++的I/O流的基礎知識 315
13.1.1 用“<<”寫入輸出 316
13.1.2 用“>>”讀取輸入 316
13.2 利用getline讀取輸入行 318
13.3 C++流類的層次結構 319
13.4 流對象:控制符及標志 321
13.4.1 流控制符 322
13.4.2 流格式標志 329
13.5 流成員函數(通用) 331
13.5.1 輸入流函數 331
13.5.2 輸出流函數 333
13.5.3 標記設置流函數 334
13.6 文件流操作 337
13.6.1 概述:文本與二進制文件I/O 337
13.6.2 創建一個文件對象 338
13.6.3 文件的特定成員函數 341
13.6.4 讀寫二進制模式 342
13.6.5 隨機存取操作 343
13.7 讀取和寫入字符串流 345
13.8 為你的類重載移位運算符 348
13.9 示例應用程序:文本文件閱讀器 350
練習 351
第14章 C++ STL string類 352
14.1 string類概述 352
14.2 string類的構造函數 353
14.3 字符串類運算符 355
14.3.1 字符串賦值 355
14.3.2 字符串連接 355
14.3.3 字符串比較 356
14.3.4 字符串索引 357
14.4 成員函數概述 358
14.5 成員函數詳解 359
14.6 string類的迭代器 372
14.6.1 標準(正向)迭代器 372
14.6.2 反向迭代器 374
14.6.3 迭代算法 375
14.6.4 使用迭代器的成員函數 375
14.7 寬字符串類(basic_string) 377
第15章 STL(向量,雙端隊列)簡介 378
15.1 容器模板簡介 378
15.2 介紹迭代器 380
15.3 向量模板 381
15.3.1 向量迭代器 382
15.3.2 向量構造函數 384
15.3.3 列表初始化(C++11) 385
15.3.4 向量函數簡明摘要 385
15.3.5 向量成員函數詳解 385
15.4 雙端隊列模板 392
15.4.1 雙端隊列迭代器 394
15.4.2 雙端隊列構造函數 394
15.4.3 雙端隊列函數簡介 395
15.4.4 雙端隊列函數詳解 396
15.5 位集合模板 402
15.5.1 位集合構造函數 403
15.5.2 位集合成員函數 403
15.6 示例應用程序:字母文本文件管理 405
練習 407
第16章 STL序列容器(List) 408
16.1 排序元素(嚴格弱序) 408
16.2 列表模板 409
16.2.1 列表迭代器 410
16.2.2 列表構造函數 412
16.2.3 列表函數簡明摘要 413
16.2.4 列表成員函數詳解 414
16.3 棧模板 423
16.4 隊列模板 426
16.5 優先隊列模板 428
16.5.1 優先隊列構造函數 430
16.5.2 優先隊列成員函數 431
16.6 示例應用程序:找出中位數 432
演習 433
第17章 STL關聯容器(map、set) 435
17.1 pair模板 435
17.2 映射模板 437
17.2.1 填充映射 438
17.2.2 查找現有映射的元素 440
17.2.3 一個更復雜的記錄類型 441
17.2.4 遍歷映射 445
17.2.5 映射實現:二叉樹 445
17.2.6 映射構造函數 447
17.2.7 映射函數簡明摘要 448
17.2.8 映射成員函數詳解 449
17.3 集合模板 455
17.3.1 填充集合 456
17.3.2 查找集合中的一個元素 457
17.3.3 集合構造函數 457
17.3.4 集合函數簡明摘要 459
17.3.5 集合成員函數詳解 460
17.4 多重映射模板 465
17.5 多重集合模板 467
17.6 無序容器(C++11) 469
17.6.1 無序容器:基本概念 469
17.6.2 調優散列表的性能 473
17.6.3 編寫你自己的散列和相等函數 475
17.7 示例應用程序:猜單詞游戲 477
練習 479
第18章 STL算法 480
18.1 STL算法:基本概念 480
18.2 使用lambda函數(C++11) 482
18.3 算法和迭代器 484
18.4 插入迭代器 485
18.5 示例應用程序:尋找中位數 486
18.6 算法簡明摘要 487
18.6.1 只讀算法 488
18.6.2 修改算法 489
18.6.3 排序和重新排序算法 489
18.6.4 堆算法 490
18.6.5 數值算法 492
18.6.6 預定義的函數對象 492
18.7 算法詳解 494
第19章 C++11的隨機化庫 527
19.1 隨機化中的問題 527
19.1.1 有偏差的分布問題 527
19.1.2 偽隨機序列的問題 528
19.1.3 獲取種子的問題 528
19.2 一個更好的隨機化方案 529
19.3 常見的引擎 531
19.4 常用的分布 532
19.5 對引擎的操作 535
19.6 對分布的操作 536
19.7 示例應用程序:骰子游戲 537
練習 539
第20章 C++11的正則表達式庫 540
20.1 C++11的正則表達式概述 540
20.2 處理轉義序列() 543
20.3 構造一個正則表達式字符串 544
20.3.1 匹配字符 544
20.3.2 模式修飾符 547
20.3.3 重復組 548
20.3.4 字符類 549
20.4 匹配和查找函數 550
20.5 “查找全部”或迭代查找 552
20.6 替換文本 553
20.7 字符串標記化 555
20.8 捕獲正則表達式異常 556
20.9 示例應用程序:RPN計算器 557
練習 559
附錄A 對右值引用(C++11)的輕松介紹 561
A.1 復制的麻煩 561
A.2 移動語義:C++11來救援 564
A.3 在用戶的String類中的右值引用 566
A.4 驗證運行時性能的提高 568
A.5 右值和包含的對象 569
A.6 引用:右值和左值再思考 570
附錄B C++11新功能概述 572
B.1 對象結構改進 572
B.2 其他核心語言增強功能 573
B.3 其他新關鍵字 574
B.4 標準庫的擴展 574
附錄C ASCII碼 576
序: