出版時(shí)間:2012-10 出版社:清華大學(xué)出版社 作者:(比)格萊戈?duì)?Gregoire, M.),(美)索爾特(Solter, N.A.),(美)凱樂(lè)普(Kleper, S.J.)著 頁(yè)數(shù):933 字?jǐn)?shù):1603000 譯者:侯普秀,鄭思遙
Tag標(biāo)簽:無(wú)
內(nèi)容概要
精通c++語(yǔ)言最新版本:c++11
c++是當(dāng)今最流行的高級(jí)程序設(shè)計(jì)語(yǔ)言之一,常用于編寫性能卓越的企業(yè)級(jí)面向?qū)ο蟪绦颍缬螒蚧虼笮蜕虡I(yè)軟件。但一個(gè)無(wú)法規(guī)避的事實(shí)是:c++語(yǔ)法紛繁復(fù)雜,學(xué)習(xí)難度較大。如何才能化繁為簡(jiǎn),全面系統(tǒng)地快速掌握c++知識(shí)呢?
c++高級(jí)編程(第2版)
將為您提供完美答案。這本權(quán)威書籍在大量實(shí)例的引導(dǎo)下,解密c++中鮮為人知的特性,揭示最新版本c++11帶來(lái)的顯著變化,并探討有助于提高代碼質(zhì)量和編程效率的編程方法、可重用設(shè)計(jì)模式和良好編程風(fēng)格。通過(guò)閱讀本書,您將能得心應(yīng)手地開發(fā)出優(yōu)秀的c++11程序。
主要內(nèi)容
提供詳盡的代碼范例,讀者可隨手在自己的代碼中使用這些代碼
全面介紹c++和stl技術(shù),包括該語(yǔ)言不尋常和怪異的方面
展示應(yīng)用c++語(yǔ)言高級(jí)特性的最佳實(shí)踐,包括操作符重載、內(nèi)存管理、制作模板和編寫多線程代碼
討論編寫跨語(yǔ)言和跨平臺(tái)代碼的技術(shù)
講述代碼重用的重要性以及編寫易讀c++代碼的微妙之處
作者簡(jiǎn)介
作者:(比利時(shí))格萊戈?duì)枺∕arc Gregoire)(美國(guó))索爾特(Nicholas A.Solter) (美國(guó))凱樂(lè)普(Scott J.Kleper) 譯者:侯普秀 鄭思遙 格萊戈?duì)柺且幻浖こ處煛K厴I(yè)于比利時(shí)魯文的天主教大學(xué)業(yè),獲得計(jì)算機(jī)科學(xué)工程碩士學(xué)位。之后,他在該大學(xué)獲得人工智能的優(yōu)等碩士學(xué)位。完成學(xué)業(yè)后,他開始為大型軟件咨詢公司OrdinaBelgium工作。他曾在Siemens和Nokia Siemens Networks為大型電信運(yùn)營(yíng)商提供有關(guān)在Solaris上運(yùn)行關(guān)鍵2G和3G軟件的咨詢服務(wù)。這份工作要求與來(lái)自南美、美國(guó)、歐洲、中東、非洲和亞洲的國(guó)際團(tuán)隊(duì)合作。Marc目前在Nikon Metrology任職,負(fù)責(zé)開發(fā)3D掃描軟件。他的主要技術(shù)專長(zhǎng)是C/C++,特別是Microsoft VC++和MFC框架。除了C/C++之外,Marc還喜歡C#,并且會(huì)用PHP創(chuàng)建網(wǎng)頁(yè)。除了在Windows上開發(fā)的主要興趣之外,他還擅長(zhǎng)在Linux平臺(tái)上開發(fā)24x7運(yùn)行的c++程序;例如EIB家庭自動(dòng)化監(jiān)控軟件。2007年4月,因?yàn)樵赩isual c++方面的專業(yè)才能他獲得了年度Microsoft MVP稱號(hào)。Marc還是CodeGum論壇的活躍分子(id為Marc G),并且為CodeGum撰寫了一些文章和FAQ條目。他還編寫了一些自由軟件和共享軟件,并通過(guò)他的網(wǎng)站www.nuonsoft.com發(fā)布。他還在www.nuonsoft.com/blog/維護(hù)了一個(gè)博客。 索爾特是一名計(jì)算機(jī)程序員,開發(fā)的軟件范圍很廣,包括系統(tǒng)軟件、游戲、網(wǎng)絡(luò)服務(wù)和其他很多類型。他在Sun Microsystem的高可用集群上所做的工作獲得了3項(xiàng)專利,還就此在國(guó)際并行和分布式處理會(huì)議上發(fā)表了一篇技術(shù)論文。在Sun的時(shí)候,他還喜歡參與OpenSolaris,他還是OpenSolaris Bible(Wiley,2009)的第一作者。現(xiàn)在重新從事Web開發(fā),他很開心地再次和Scott一起在Context Optional工作。Nick在斯坦福大學(xué)學(xué)習(xí)計(jì)算機(jī)科學(xué),他在這所大學(xué)獲得了本科和理科碩士學(xué)位,他的主要研究領(lǐng)域是計(jì)算機(jī)系統(tǒng)。他曾在富勒頓社區(qū)大學(xué)講授了一年的C++課程。Nick和他的妻子和兩個(gè)孩子生活在美麗的科羅拉多,他在科羅拉多享受著雪上運(yùn)動(dòng)的樂(lè)趣。 凱樂(lè)普在小學(xué)就開始了他的編程生涯,那時(shí)他在Tandy TRS—80上用BASIC語(yǔ)言編寫探險(xiǎn)游戲。作為他所在高中的Mac迷,Scott轉(zhuǎn)向了更高級(jí)的語(yǔ)言,并且發(fā)布了一些屢獲殊榮的共享軟件。Scott加入了斯坦福大學(xué),并且在這所大學(xué)獲得了本科和計(jì)算機(jī)科學(xué)的理學(xué)碩士學(xué)位,主要研究領(lǐng)域是人機(jī)交互。在上大學(xué)的時(shí)候,Scott是一門涉及編程入門、面向?qū)ο笤O(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)、GUI框架和小組項(xiàng)目的課程的助教。他之后在斯坦福的一門課程采用這本書作為課本。畢業(yè)后,Scott是幾家公司創(chuàng)始團(tuán)隊(duì)中的首席工程師。2006年,Scott與他人合伙創(chuàng)建了ContextOptional,Inc.,這是一家提供社會(huì)營(yíng)銷技術(shù)的市場(chǎng)領(lǐng)先的供應(yīng)商。在工作之余,Scott還熱衷于在線購(gòu)物、閱讀和彈吉他。
書籍目錄
目錄回到頂部↑《c++高級(jí)編程(第2版)》
第ⅰ部分 專業(yè)的c++簡(jiǎn)介
第1章 c++速成
1.1 c++基礎(chǔ)知識(shí)
1.1.1 小程序的“hello world”
1.1.2 名稱空間
1.1.3 變量
1.1.4 運(yùn)算符
1.1.5 類型
1.1.6 條件
1.1.7 循環(huán)
1.1.8 數(shù)組
1.1.9 函數(shù)
1.2 深入研究c++
1.2.1 指針以及動(dòng)態(tài)內(nèi)存
1.2.2 c++中的字符串
1.2.3 引用
1.2.4 異常
1.2.5 const的多種用法
1.3 作為面向?qū)ο笳Z(yǔ)言的c++
.1.4 標(biāo)準(zhǔn)庫(kù)
1.5 第一個(gè)有用的c++程序
1.5.1 雇員記錄系統(tǒng)
1.5.2 employee類
1.5.3 database類
1.5.4 用戶界面
1.5.5 評(píng)估程序
1.6 本章小結(jié)
第2章 設(shè)計(jì)專業(yè)的c++程序
2.1 程序設(shè)計(jì)概述
2.2 程序設(shè)計(jì)的重要性
2.3 c++設(shè)計(jì)的特點(diǎn)
2.4 c++設(shè)計(jì)的兩個(gè)原則
2.4.1 抽象
2.4.2 重用
2.5 重用代碼
2.5.1 關(guān)于術(shù)語(yǔ)的說(shuō)明
2.5.2 決定是否重用代碼
2.5.3 重用代碼的策略
2.5.4 綁定第三方應(yīng)用程序
2.5.5 開放源代碼庫(kù)
2.5.6 c++標(biāo)準(zhǔn)庫(kù)
2.6 設(shè)計(jì)模式以及技巧
2.7 設(shè)計(jì)一個(gè)國(guó)際象棋程序
2.7.1 需求
2.7.2 設(shè)計(jì)步驟
2.8 本章小結(jié)
第3章 面向?qū)ο笤O(shè)計(jì)
3.1 過(guò)程化的思考方式
3.2 面向?qū)ο笏枷?br />3.2.1 類
3.2.2 組件
3.2.3 屬性
3.2.4 行為
3.2.5 綜合考慮
3.3 生活在對(duì)象世界里
3.3.1 過(guò)度使用對(duì)象
3.3.2 過(guò)于通用的對(duì)象
3.4 對(duì)象之間的關(guān)系
3.4.1 “有一個(gè)”關(guān)系
3.4.2 “是一個(gè)”關(guān)系(繼承)
3.4.3 “有一個(gè)”與“是一個(gè)”的區(qū)別
3.4.4 not-a關(guān)系
3.4.5 層次結(jié)構(gòu)
3.4.6 多重繼承
3.4.7 混入類
3.5 抽象
3.5.1 接口與實(shí)現(xiàn)
3.5.2 決定公開的接口
3.5.3 設(shè)計(jì)成功的抽象
3.6 本章小結(jié)
第4章 設(shè)計(jì)可重用代碼
4.1 重用哲學(xué)
4.2 如何設(shè)計(jì)可重用的代碼
4.2.1 使用抽象
4.2.2 構(gòu)建理想的重用代碼
4.2.3 設(shè)計(jì)有用的接口
4.2.4 協(xié)調(diào)通用性以及使用性
4.3 本章小結(jié)
第5章 編碼風(fēng)格
5.1 良好外觀的重要性
5.1.1 事先考慮
5.1.2 良好風(fēng)格的元素
5.2 為代碼編寫文檔
5.2.1 使用注釋的原因
5.2.2 注釋的風(fēng)格
5.2.3 本書的注釋
5.3 分解
5.3.1 通過(guò)重構(gòu)分解
5.3.2 通過(guò)設(shè)計(jì)分解
5.3.3 本書中的分解
5.4 命名
5.4.1 選擇一個(gè)恰當(dāng)?shù)拿Q
5.4.2 命名約定
5.5 使用具有風(fēng)格的語(yǔ)言特性
5.5.1 使用常量
5.5.2 使用引用代替指針
5.5.3 使用自定義異常
5.6 格式
5.6.1 關(guān)于大括號(hào)對(duì)齊的爭(zhēng)論
5.6.2 關(guān)于空格以及圓括號(hào)的爭(zhēng)論
5.6.3 空格以及制表符
5.7 風(fēng)格的挑戰(zhàn)
5.8 本章小結(jié)
第ⅱ部分 專業(yè)的c++編碼方法
第6章 熟悉類和對(duì)象
6.1 電子表格示例介紹
6.2 編寫類
6.2.1 類定義
6.2.2 定義方法
6.2.3 使用對(duì)象
6.3 對(duì)象的生命周期
6.3.1 創(chuàng)建對(duì)象
6.3.2 銷毀對(duì)象
6.3.3 對(duì)象賦值
6.3.4 復(fù)制以及賦值的區(qū)別
6.4 本章小結(jié)
第7章 掌握類與對(duì)象
7.1 對(duì)象的動(dòng)態(tài)內(nèi)存分配
7.1.1 spreadsheet類
7.1.2 使用析構(gòu)函數(shù)釋放內(nèi)存
7.1.3 處理復(fù)制以及賦值
7.2 定義數(shù)據(jù)成員的類型
7.2.1 靜態(tài)數(shù)據(jù)成員
7.2.2 常量數(shù)據(jù)成員
7.2.3 引用數(shù)據(jù)成員
7.2.4 常量引用數(shù)據(jù)成員
7.3 與方法有關(guān)的更多內(nèi)容
7.3.1 靜態(tài)方法
7.3.2 const方法
7.3.3 方法重載
7.3.4 默認(rèn)參數(shù)
7.3.5 內(nèi)聯(lián)方法
7.4 嵌套類
7.5 類內(nèi)的枚舉類型
7.6 友元
7.7 運(yùn)算符重載
7.7.1 示例:為spreadsheetcell
實(shí)現(xiàn)加法
7.7.2 重載算術(shù)運(yùn)算符
7.7.3 重載比較運(yùn)算符
7.7.4 創(chuàng)建具有運(yùn)算符重載的類型
7.8 創(chuàng)建穩(wěn)定的接口
7.9 本章小結(jié)
第8章 揭秘繼承技術(shù)
8.1 使用繼承構(gòu)建類
8.1.1 擴(kuò)展類
8.1.2 重寫方法
8.2 使用繼承重用代碼
8.2.1 weatherprediction類
8.2.2 在子類中添加功能
8.2.3 在子類中替換功能
8.3 利用父類
8.3.1 父類構(gòu)造函數(shù)
8.3.2 父類的析構(gòu)函數(shù)
8.3.3 使用父類方法
8.3.4 向上轉(zhuǎn)型以及向下轉(zhuǎn)型
8.4 繼承與多態(tài)性
8.4.1 回到電子表格
8.4.2 設(shè)計(jì)多態(tài)性的電子表格單元格
8.4.3 電子表格單元格的基類
8.4.4 獨(dú)立的子類
8.4.5 利用多態(tài)性
8.4.6 考慮將來(lái)
8.5 多重繼承
8.5.1 從多個(gè)類繼承
8.5.2 名稱沖突以及歧義基類
8.6 有趣而晦澀的繼承問(wèn)題
8.6.1 修改重寫方法的特征
8.6.2 繼承構(gòu)造函數(shù)(僅限c++11)
8.6.3 重寫方法時(shí)的特殊情況
8.6.4 子類中的復(fù)制構(gòu)造函數(shù)以及賦值運(yùn)算符
8.6.5 virtual的真相
8.6.6 運(yùn)行時(shí)類型工具
8.6.7 非public繼承
8.6.8 虛基類
8.7 本章小結(jié)
第9章 理解靈活而奇特的c++
9.1 引用
9.1.1 引用變量
9.1.2 引用數(shù)據(jù)成員
9.1.3 引用參數(shù)
9.1.4 引用作為返回值
9.1.5 使用引用還是指針
9.1.6 右值引用(僅限c++11)
9.2 關(guān)鍵字的疑問(wèn)
9.2.1 const關(guān)鍵字
9.2.2 static關(guān)鍵字
9.2.3 非局部變量的初始化順序
9.3 類型以及類型轉(zhuǎn)換
9.3.1 typedef
9.3.2 函數(shù)指針typedef
9.3.3 類型別名(僅限c++11)
9.3.4 類型轉(zhuǎn)換
9.4 作用域解析
9.5 c++11
9.5.1 統(tǒng)一初始化
9.5.2 可選函數(shù)語(yǔ)法
9.5.3 空指針文本
9.5.4 尖括號(hào)
9.5.5 初始化列表
9.5.6 顯式轉(zhuǎn)換運(yùn)算符
9.5.7 特性
9.5.8 用戶定義的字面量
9.6 頭文件
9.7 c的實(shí)用工具
9.7.1 變長(zhǎng)參數(shù)列表
9.7.2 預(yù)處理器宏
9.8 本章小結(jié)
第10章 錯(cuò)誤處理
10.1 錯(cuò)誤與異常
10.1.1 異常的含義
10.1.2 c++中異常的優(yōu)點(diǎn)
10.1.3 c++中異常的缺點(diǎn)
10.1.4 我們的建議
10.2 異常機(jī)制
10.2.1 拋出并捕獲異常
10.2.2 異常類型
10.2.3 拋出并捕獲多個(gè)異常
10.2.4 未捕獲的異常
10.2.5 拋出列表
10.3 異常與多態(tài)性
10.3.1 標(biāo)準(zhǔn)異常體系
10.3.2 在類層次結(jié)構(gòu)中捕獲異常
10.3.3 編寫自己的異常類
10.3.4 嵌套異常(僅限c++11)
10.4 堆棧的釋放與清理
10.4.1 使用智能指針
10.4.2 捕獲、清理并重新拋出
10.5 常見的錯(cuò)誤處理問(wèn)題
10.5.1 內(nèi)存分配錯(cuò)誤
10.5.2 構(gòu)造函數(shù)中的錯(cuò)誤
10.5.3 構(gòu)造函數(shù)的function-try-blocks
10.5.4 析構(gòu)函數(shù)中的錯(cuò)誤
10.6 綜合應(yīng)用
10.7 本章小結(jié)
第11章 深入探討標(biāo)準(zhǔn)庫(kù)
11.1 編碼原則
11.1.1 使用模板
11.1.2 使用運(yùn)算符重載
11.2 c++標(biāo)準(zhǔn)庫(kù)概述
11.2.1 字符串
11.2.2 i/o流
11.2.3 本地化
11.2.4 智能指針
11.2.5 異常
11.2.6 數(shù)學(xué)工具
11.2.7 時(shí)間工具(僅限c++11)
11.2.8 隨機(jī)數(shù)(僅限c++11)
11.2.9 編譯時(shí)有理數(shù)運(yùn)算(僅限c++11)
11.2.10 元組(僅限c++11)
11.2.11 正則表達(dá)式(僅限c++11)
11.2.12 標(biāo)準(zhǔn)模板庫(kù)
11.2.13 stl算法
11.2.14 stl中還缺什么
11.3 本章小結(jié)
第12章 理解容器與迭代器
12.1 容器概述
12.1.1 元素的需求
12.1.2 異常和錯(cuò)誤檢查
12.1.3 迭代器
12.1.4 c++11的變化
12.2 順序容器
12.2.1 vector
12.2.2 vector[bool]特化
12.2.3 deque
12.2.4 list
12.2.5 array(僅限c++11)
12.2.6 forward_list(僅限c++11)
12.3 容器適配器
12.3.1 queue
12.3.2 priority_queue
12.3.3 stack
12.4 關(guān)聯(lián)容器
12.4.1 pair工具類
12.4.2 map
12.4.3 multimap
12.4.4 set
12.4.5 multiset
12.5 無(wú)序關(guān)聯(lián)容器/哈希表(僅限c++11)
12.5.1 哈希函數(shù)
12.5.2 unordered_map
12.5.3 unordered_multimap
12.5.4 unordered_set/unordered_ multiset
12.6 其他容器
12.6.1 標(biāo)準(zhǔn)c風(fēng)格數(shù)組
12.6.2 string
12.6.3 流
12.6.4 bitset
12.7 本章小結(jié)
第13章 掌握stl算法
13.1 算法概述
13.1.1 find和find_if算法
13.1.2 accumulate算法
13.1.3 在算法中使用c++11的移動(dòng)語(yǔ)義
13.2 lambda表達(dá)式(僅限c++11)
13.2.1 語(yǔ)法
13.2.2 捕捉塊
13.2.3 將lambda表達(dá)式用作返回值
13.2.4 將lambda表達(dá)式用作參數(shù)
13.2.5 示例
13.3 函數(shù)對(duì)象
13.3.1 算術(shù)函數(shù)對(duì)象
13.3.2 比較函數(shù)對(duì)象
13.3.3 邏輯函數(shù)對(duì)象
13.3.4 按位函數(shù)對(duì)象(僅限c++11)
13.3.5 函數(shù)對(duì)象適配器
13.3.6 編寫自己的函數(shù)對(duì)象
13.4 算法詳解
13.4.1 工具算法
13.4.2 非修改算法
13.4.3 修改算法
13.4.4 排序算法
13.4.5 集合算法
13.5 算法示例:審核選民登記
13.5.1 選民登記審核問(wèn)題描述
13.5.2 auditvoterrolls函數(shù)
13.5.3 getduplicates函數(shù)
13.5.4 測(cè)試auditvoterrolls函數(shù)
13.6 本章小結(jié)
第14章 使用字符串與正則表達(dá)式
14.1 動(dòng)態(tài)字符串
14.1.1 c風(fēng)格字符串
14.1.2 字符串字面量
14.1.3 c++ string類
14.1.4 原始字符串字面量(僅限c++11)
14.2 本地化
14.2.1 本地化字符串字面量
14.2.2 寬字符
14.2.3 非西方字符集
14.2.4 locale和facet
14.3 正則表達(dá)式(僅限c++11)
14.3.1 ecmascript語(yǔ)法
14.3.2 regex庫(kù)
14.3.3 regex_match()
14.3.4 regex_search()
14.3.5 regex_iterator
14.3.6 regex_token_iterator
14.3.7 regex_replace()
14.4 本章小結(jié)
第15章 c++ i/o揭秘
15.1 使用流
15.1.1 流的含義
15.1.2 流的來(lái)源和目標(biāo)
15.1.3 流式輸出
15.1.4 流式輸入
15.1.5 對(duì)象的輸入輸出
15.2 字符串流
15.3 文件流
15.3.1 通過(guò)seek()和tell()在文件中轉(zhuǎn)移
15.3.2 將流連接在一起
15.4 雙向i/o
15.5 本章小結(jié)
第16章 其他庫(kù)工具
16.1 std::function
16.2 有理數(shù)
16.3 chrono庫(kù)
16.3.1 持續(xù)時(shí)間
16.3.2 時(shí)鐘
16.3.3 時(shí)點(diǎn)
16.4 生成隨機(jī)數(shù)
16.4.1 隨機(jī)數(shù)引擎
16.4.2 隨機(jī)數(shù)引擎適配器
16.4.3 預(yù)定義的引擎和引擎適配器
16.4.4 生成隨機(jī)數(shù)
16.4.5 隨機(jī)數(shù)分布
16.5 元組
16.6 本章小結(jié)
第17章 自定義和擴(kuò)展stl
17.1 分配器
17.2 迭代器適配器
17.2.1 反向迭代器
17.2.2 流迭代器
17.2.3 插入迭代器
17.2.4 移動(dòng)迭代器(僅限c++11)
17.3 擴(kuò)展stl
17.3.1 擴(kuò)展stl的原因
17.3.2 編寫一個(gè)stl算法
17.3.3 編寫一個(gè)stl容器
17.4 本章小結(jié)
第ⅲ部分 掌握c++的高級(jí)特性
第18章 c++運(yùn)算符重載
18.1 運(yùn)算符重載概述
18.1.1 重載運(yùn)算符的原因
18.1.2 運(yùn)算符重載的限制
18.1.3 運(yùn)算符重載的決策
18.1.4 不要重載的運(yùn)算符
18.1.5 可重載運(yùn)算符小結(jié)
18.1.6 右值引用(僅限c++11)
18.2 重載算術(shù)運(yùn)算符
18.2.1 重載一元負(fù)號(hào)和一元正號(hào)
18.2.2 重載遞增和遞減運(yùn)算符
18.3 重載按位運(yùn)算符和二元邏輯運(yùn)算符
18.4 重載插入運(yùn)算符和提取運(yùn)算符
18.5 重載下標(biāo)運(yùn)算符
18.5.1 通過(guò)operator[]提供只讀訪問(wèn)
18.5.2 非整數(shù)數(shù)組索引
18.6 重載函數(shù)調(diào)用運(yùn)算符
18.7 重載解除引用運(yùn)算符
18.7.1 實(shí)現(xiàn)operator*
18.7.2 實(shí)現(xiàn)operator-]
18.7.3 operator -]*的含義
18.8 編寫轉(zhuǎn)換運(yùn)算符
18.8.1 轉(zhuǎn)換運(yùn)算符的多義性問(wèn)題
18.8.2 用于布爾表達(dá)式的轉(zhuǎn)換
18.9 重載內(nèi)存分配和釋放運(yùn)算符
18.9.1 new和delete的工作原理
18.9.2 重載operator new和operator delete
18.9.3 重載帶有額外參數(shù)的operator new和operator delete
18.9.4 顯式地刪除/默認(rèn)化operator new和operator delete(僅限c++11)
18.10 本章小結(jié)
第19章 利用模板編寫泛型代碼
19.1 模板概述
19.2 類模板
19.2.1 編寫類模板
19.2.2 編譯器處理模板的原理
19.2.3 將模板代碼分布在多個(gè)文件中
19.2.4 模板參數(shù)
19.2.5 方法模板
19.2.6 模板類特例化
19.2.7 子類化模板類
19.2.8 繼承還是特例化
19.2.9 模板別名(僅限c++11)
19.2.10 替換函數(shù)語(yǔ)法(僅限c++11)
19.3 函數(shù)模板
19.3.1 函數(shù)模板特例化
19.3.2 函數(shù)模板重載
19.3.3 類模板的friend函數(shù)模板
19.4 本章小結(jié)
第20章 模板的高級(jí)特性
20.1 深入了解模板參數(shù)
20.1.1 深入了解模板類型參數(shù)
20.1.2 模板參數(shù)模板介紹
20.1.3 深入了解非類型模板參數(shù)
20.2 模板類部分特例化
20.3 通過(guò)重載模擬函數(shù)部分特例化
20.4 模板遞歸
20.4.1 一個(gè)n維網(wǎng)格:初次嘗試
20.4.2 一個(gè)真正的n維網(wǎng)格
20.5 類型推導(dǎo)(僅限c++11)
20.5.1 auto關(guān)鍵字
20.5.2 decltype關(guān)鍵字
20.5.3 結(jié)合模板使用auto和decltype
20.6 可變參數(shù)模板(僅限c++11)
20.6.1 類型安全的可變長(zhǎng)度參數(shù)列表
20.6.2 可變數(shù)目的混入類
20.7 元編程
20.7.1 編譯時(shí)階乘
20.7.2 循環(huán)展開
20.7.3 打印元組(僅限c++11)
20.7.4 類型trait(僅限c++11)
20.7.5 結(jié)論
20.8 本章小結(jié)
第21章 高效的內(nèi)存管理
21.1 使用動(dòng)態(tài)內(nèi)存
21.1.1 如何描繪內(nèi)存
21.1.2 分配和釋放
21.1.3 數(shù)組
21.1.4 使用指針
21.2 數(shù)組-指針的對(duì)偶性
21.2.1 數(shù)組就是指針
21.2.2 并非所有的指針都是數(shù)組
21.3 低級(jí)內(nèi)存操作
21.3.1 指針運(yùn)算
21.3.2 自定義內(nèi)存管理
21.3.3 垃圾回收
21.3.4 對(duì)象池
21.3.5 函數(shù)指針
21.3.6 方法和成員的指針
21.4 智能指針
21.4.1 舊的過(guò)時(shí)的auto_ptr
21.4.2 新的c++11智能指針
21.4.3 編寫自己的智能指針類
21.5 內(nèi)存常見的陷阱
21.5.1 分配不足的字符串
21.5.2 內(nèi)存泄漏
21.5.3 雙重刪除和無(wú)效指針
21.5.4 訪問(wèn)內(nèi)存越界
21.6 本章小結(jié)
第22章 c++多線程編程
22.1 簡(jiǎn)介
22.2 原子操作庫(kù)
22.2.1 原子類型示例
22.2.2 原子操作
22.3 線程
22.3.1 通過(guò)函數(shù)指針創(chuàng)建線程
22.3.2 通過(guò)函數(shù)對(duì)象創(chuàng)建線程
22.3.3 通過(guò)lambda創(chuàng)建線程
22.3.4 通過(guò)成員函數(shù)創(chuàng)建線程
22.3.5 線程本地存儲(chǔ)
22.3.6 取消線程
22.3.7 從線程獲得結(jié)果
22.3.8 復(fù)制和重新拋出異常
22.4 互斥
22.4.1 互斥體類
22.4.2 鎖
22.4.3 std::call_once
22.4.4 互斥體的用法示例
22.5 條件變量
22.6 future
22.7 示例:多線程日志記錄器類
22.8 線程池
22.9 線程設(shè)計(jì)和最佳實(shí)踐
22.10 本章小結(jié)
第ⅳ部分 c++軟件工程
第23章 充分利用軟件工程方法
23.1 過(guò)程的必要性
23.2 軟件生命周期模型
23.2.1 分段模型和瀑布模型
23.2.2 螺旋模型
23.2.3 rational統(tǒng)一過(guò)程
23.3 軟件工程方法學(xué)
23.3.1 敏捷
23.3.2 scrum
23.3.3 極限編程(xp)
23.3.4 軟件分流
23.4 構(gòu)建自己的過(guò)程和方法
23.4.1 對(duì)新思想采取開放態(tài)度
23.4.2 提出新想法
23.4.3 知道什么行得通什么行不通
23.4.4 不要逃避
23.5 源代碼控制
23.6 本章小結(jié)
第24章 編寫高效的c++程序
24.1 性能和效率概述
24.1.1 提升效率的兩種方式
24.1.2 兩種程序
24.1.3 c++是不是低效的語(yǔ)言
24.2 語(yǔ)言層次的效率
24.2.1 高效地操縱對(duì)象
24.2.2 使用內(nèi)聯(lián)方法和函數(shù)
24.3 設(shè)計(jì)層次的效率
24.3.1 盡可能多地緩存
24.3.2 使用對(duì)象池
24.4 剖析
24.4.1 使用gprof的剖析范例
24.4.2 使用visual c++ 2010的剖析范例
24.5 本章小結(jié)
第25章 開發(fā)跨平臺(tái)和跨語(yǔ)言的應(yīng)用程序
25.1 跨平臺(tái)開發(fā)
25.1.1 硬件架構(gòu)問(wèn)題
25.1.2 實(shí)現(xiàn)問(wèn)題
25.1.3 平臺(tái)相關(guān)的特性
25.2 跨語(yǔ)言開發(fā)
25.2.1 混合使用c和c++
25.2.2 轉(zhuǎn)移范例
25.2.3 和c代碼鏈接
25.2.4 混合使用c#與c++
25.2.5 通過(guò)jni混合java和c++
25.2.6 混合c++使用perl和shell腳本
25.2.7 混合使用c++和匯編代碼
25.3 本章小結(jié)
第26章 成為測(cè)試專家
26.1 質(zhì)量控制
26.1.1 測(cè)試是誰(shuí)的職責(zé)
26.1.2 bug的生命周期
26.1.3 bug跟蹤工具
26.2 單元測(cè)試
26.2.1 單元測(cè)試的方法
26.2.2 單元測(cè)試過(guò)程
26.2.3 單元測(cè)試實(shí)例
26.3 更高級(jí)別的測(cè)試
26.3.1 集成測(cè)試
26.3.2 系統(tǒng)測(cè)試
26.3.3 回歸測(cè)試
26.4 成功測(cè)試的技巧
26.5 本章小結(jié)
第27章 熟練掌握調(diào)試技術(shù)
27.1 調(diào)試的基本定律
27.2 bug分類學(xué)
27.3 避免bug
27.4 為bug做好規(guī)劃
27.4.1 錯(cuò)誤日志
27.4.2 調(diào)試跟蹤
27.4.3 斷言
27.4.4 靜態(tài)斷言(僅限c++11)
27.5 調(diào)試技術(shù)
27.5.1 重現(xiàn)bug
27.5.2 調(diào)試可重復(fù)的bug
27.5.3 調(diào)試不可重現(xiàn)的bug
27.5.4 調(diào)試內(nèi)存問(wèn)題
27.5.5 調(diào)試多線程程序
27.5.6 調(diào)試示例:文章引用
27.5.7 從articlecitations示例中總結(jié)的教訓(xùn)
27.6 本章小結(jié)
第28章 將設(shè)計(jì)技術(shù)和框架結(jié)合使用
28.1 c++編碼示例
28.1.1 編寫一個(gè)類
28.1.2 子類化已有的類
28.1.3 拋出和捕獲異常
28.1.4 從文件中讀取
28.1.5 寫入文件
28.1.6 寫一個(gè)模板類
28.2 肯定有更好的方法
28.2.1 雙分派
28.2.2 混入類
28.3 面向?qū)ο蟮目蚣?br />28.3.1 使用框架
28.3.2 模型-視圖-控制器范例
28.4 本章小結(jié)
第29章 應(yīng)用設(shè)計(jì)模式
29.1 迭代器模式
29.2 單實(shí)例模式
29.2.1 示例:一種日志機(jī)制
29.2.2 實(shí)現(xiàn)一個(gè)單實(shí)例
29.2.3 使用一個(gè)單實(shí)例
29.2.4 單實(shí)例模式和多線程
29.3 工廠模式
29.3.1 示例:汽車工廠模擬
29.3.2 實(shí)現(xiàn)一個(gè)工廠
29.3.3 使用一個(gè)工廠
29.3.4 工廠的其他用途
29.4 代理模式
29.4.1 示例:隱藏網(wǎng)絡(luò)連接的問(wèn)題
29.4.2 實(shí)現(xiàn)一個(gè)代理
29.4.3 使用代理
29.5 適配器模式
29.5.1 示例:適配一個(gè)logger類
29.5.2 實(shí)現(xiàn)一個(gè)適配器
29.5.3 使用適配器
29.6 裝飾器模式
29.6.1 示例:在網(wǎng)頁(yè)中定義樣式
29.6.2 裝飾器的實(shí)現(xiàn)
29.6.3 使用一個(gè)裝飾器
29.7 責(zé)任鏈模式
29.7.1 示例:事件處理
29.7.2 責(zé)任鏈的實(shí)現(xiàn)
29.7.3 責(zé)任鏈的使用
29.8 觀察者模式
29.8.1 示例:事件處理
29.8.2 觀察者的實(shí)現(xiàn)
29.8.3 使用觀察者
29.9 本章小結(jié)
附錄a c++面試
附錄b 帶注解的參考文獻(xiàn)
附錄c 標(biāo)準(zhǔn)庫(kù)頭文件
章節(jié)摘錄
版權(quán)頁(yè): 插圖: 提供整潔的接口 為了避免在接口中遺漏功能,某些程序員走向另一個(gè)極端:他們包含了可以想到的所有功能。使用這個(gè)接口的程序員總是可以找到完成任務(wù)的方法。遺憾的是,這個(gè)接口可能非?;靵y,他們無(wú)法指出如何實(shí)現(xiàn)這個(gè)接口。 不要在接口中提供不必要的功能,保持接口的簡(jiǎn)單整潔。乍看上去,這個(gè)指導(dǎo)方針與前面避免遺漏必要功能的策略相違背。為了避免遺漏功能而包含所有想象得到的接口盡管是一個(gè)策略,但是并不是一個(gè)健全的策略。應(yīng)該包含必要的功能并省略不必要甚至起反作用的接口。 再次考慮汽車示例。開汽車只需要使用幾個(gè)組件:方向盤、剎車、油門踏板、換擋、后視鏡、里程計(jì)以及儀表板上的一些其他儀表?,F(xiàn)在想象一下,如果汽車的儀表板與飛機(jī)的駕駛員座艙類似,具有上百個(gè)儀表、控制桿、監(jiān)控器以及按鈕,這沒(méi)法用!由于接口比較簡(jiǎn)單,開汽車比開飛機(jī)容易多了:您不需要關(guān)心海拔高度、與控制塔通話或者控制飛機(jī)中眾多的組件(例如機(jī)翼、發(fā)動(dòng)機(jī)以及起落裝置)。 此外,從發(fā)展的觀點(diǎn)來(lái)看,比較小的庫(kù)容易維護(hù)。如果您試圖讓每個(gè)人都很愉快,那么就應(yīng)該留出更多的空間來(lái)容納錯(cuò)誤,如果您的實(shí)現(xiàn)非常復(fù)雜以至于糾纏不清,哪怕一個(gè)錯(cuò)誤也能讓庫(kù)變得無(wú)效。 遺憾的是,設(shè)計(jì)簡(jiǎn)潔接口的思想看起來(lái)很好,但是實(shí)際上非常困難。這個(gè)規(guī)則基本上是主觀的:您決定什么是必須的,什么不是。當(dāng)然,當(dāng)您的判斷出錯(cuò)時(shí)客戶一定會(huì)通知您。 提供文檔以及注釋 無(wú)論接口多么便于使用,都應(yīng)該提供使用文檔。如果不告訴程序員如何使用,不能期望他們會(huì)正確使用庫(kù)。應(yīng)該將庫(kù)或代碼稱為供其他程序員使用的產(chǎn)品。產(chǎn)品應(yīng)該帶有說(shuō)明其正確用法的文檔。提供接口文檔有兩種方法:接口自身內(nèi)部的注釋以及外部的文檔。您應(yīng)該盡量提供這兩種文檔。大多數(shù)公開的APl只提供外部文檔:在許多標(biāo)準(zhǔn)Unix以及Windows頭文件中都缺少注釋。在Unix中,文檔的形式通常是名為inan pages的在線手冊(cè)。在Windows中,集成開發(fā)環(huán)境通常附帶文檔。雖然多數(shù)APl以及庫(kù)都取消了接口內(nèi)的注釋,但是我們認(rèn)為這種形式的文檔才是最重要的。絕不應(yīng)該給出一個(gè)只包含代碼的“赤裸的”頭文件。即使注釋與外部文檔完全相同,具有友好注釋的頭文件也比只有代碼的頭文件看上去舒服,即使是最優(yōu)秀的程序員也希望經(jīng)??吹綍嬲Z(yǔ)言。 有些程序員使用工具將注釋自動(dòng)轉(zhuǎn)換為文檔,第5章詳細(xì)討論這一技術(shù)。 無(wú)論您提供注釋、外部文檔還是二者都提供,文檔都應(yīng)該描述庫(kù)的行為而不是實(shí)現(xiàn)。行為包括輸入、輸出、錯(cuò)誤條件以及處理、預(yù)定用法以及|生能保障。例如,描述生成單個(gè)隨機(jī)數(shù)的調(diào)用的文檔應(yīng)該說(shuō)明這個(gè)調(diào)用不需要參數(shù),返回一個(gè)預(yù)先指定范圍的整數(shù),還應(yīng)該列出當(dāng)出現(xiàn)問(wèn)題時(shí)可能拋出的所有異常。文檔不應(yīng)該詳細(xì)解釋實(shí)際生成數(shù)字的線性同余算法,在接口注釋中提供太多的實(shí)現(xiàn)細(xì)節(jié)可能是接口開發(fā)中最常見的錯(cuò)誤。適用于維護(hù)庫(kù)的人員而不是客戶的注釋會(huì)破壞接口以及實(shí)現(xiàn)的良好分離,許多開發(fā)人員都見到過(guò)這種情況。 當(dāng)然內(nèi)部的實(shí)現(xiàn)也應(yīng)該有文檔記錄,只是不要把它作為接口的一部分公開。第5章詳細(xì)討論如何在代碼中恰當(dāng)?shù)厥褂米⑨尅?/pre>編輯推薦
《C++高級(jí)編程(第2版)》并不是講解語(yǔ)言的大量細(xì)節(jié)并給出少量真實(shí)世界的場(chǎng)景,而是教您如何在真實(shí)世界中使用C++?!禖++高級(jí)編程(第2版)》還會(huì)披露一些鮮為人知的特性,使用這些特性可以讓編程更簡(jiǎn)單;還講解了可重用的編碼模式,模式是區(qū)分編程新手和專業(yè)程序員的標(biāo)志。編程書籍往往重點(diǎn)描述語(yǔ)言的語(yǔ)法,而不是語(yǔ)言在真實(shí)世界中的應(yīng)用。典型的C++教材在每一章中介紹了語(yǔ)言中的大部分知識(shí),講解語(yǔ)法并列舉示例。格萊戈?duì)枴⑺鳡柼?、凱樂(lè)普編著的《C++高級(jí)編程(第2版)》不遵循這個(gè)模式。圖書封面
圖書標(biāo)簽Tags
無(wú)評(píng)論、評(píng)分、閱讀與下載
- 還沒(méi)讀過(guò)(99)
- 勉強(qiáng)可看(719)
- 一般般(122)
- 內(nèi)容豐富(5089)
- 強(qiáng)力推薦(417)