《C++沉思錄》基于作者在知名技術(shù)雜志發(fā)表的技術(shù)文章、世界各地發(fā)表的演講以及斯坦福大學(xué)的課程講義整理、寫作而成,融聚了作者10多年C++程序生涯的真知灼見。
《C++沉思錄》分為6篇,共32章,分別對C++語言的歷史和特點、類和繼承、STL與泛型編程、庫的設(shè)計等幾大技術(shù)話題進行了詳細而深入的討論,細微之處幾乎涵蓋了C++所有的設(shè)計思想和技術(shù)細節(jié)。本書通過精心挑選的實例,向讀者傳達先進的程序設(shè)計方法和理念。
《C++沉思錄》適合有一定經(jīng)驗的C++程序員閱讀學(xué)習(xí),可以幫助他們提升技術(shù)能力,成為C++程序設(shè)計的高手。
聆聽大師教誨,掌握編程精髓。
1.基于作者在知名技術(shù)雜志發(fā)表的技術(shù)文章、世界各地發(fā)表的演講以及斯坦福大學(xué)的課程講義整理、寫作而成。
2.著名技術(shù)伉儷十年編程生涯的真知灼見。
3.本書重點關(guān)注的是一些重要的C++思想和編程技巧,旨在讓讀者理解C++編程中的一些原理(why),而不僅僅是工作機制(how),無論你是否是C++編程專家,都會在本書中發(fā)現(xiàn)重要的與C++編程有關(guān)的技巧和思考。
4.C++之父 Bjarne Stroustrup 傾力推薦。
本書涵蓋了如下內(nèi)容:
涵蓋了廣泛的C++思想和技術(shù)——從詳細的代碼示例到設(shè)計原則和哲學(xué),不一而足;
介紹了如何看待C++中的編程,而不僅僅是遵循C++的規(guī)則進行編程;
解釋了示例背后的動機;有時甚至使用兩種不同的方法來解決同一個問題;
囊括了面向?qū)ο缶幊毯屯ㄓ镁幊蹋?解釋了標準模板庫背后的思想,這是C++中的重要創(chuàng)新。
Andrew Koenig,AT&T大規(guī)模程序研發(fā)部(前貝爾實驗室)成員。他從1986年開始從事C語言的研究,1977年加入貝爾實驗室。他編寫了一些早期的類庫,并在1988年組織召開了第一個具有相當規(guī)模的C++會議。在ISO/ANSI C++委員會成立的1989年,他就加入了該委員會,并一直擔任項目編輯。他已經(jīng)發(fā)表了100多篇C++方面的論文,并在Addsion-Wesley出版了C Traps and Pitfalls 一書(中文版名為《C缺陷與陷阱》,由人民郵電出版社出版),還應(yīng)邀到世界各地演講。
Barbara Moo,AT&T網(wǎng)絡(luò)體系結(jié)構(gòu)部門負責人。在1983年加入貝爾實驗室不久,她開始從事Fortran 77編譯器的研究工作,這是第一個用C++編寫的商業(yè)產(chǎn)品。她一直負責AT&T的C++編譯器項目,直到AT&T賣掉它的軟件業(yè)務(wù)。她還為SIG會議、Lund技術(shù)學(xué)院和斯坦福大學(xué)提供輔導(dǎo)課程。
Anderw Koenig和Barbara Moo不僅有著多年的C++開發(fā)、研究和教學(xué)經(jīng)驗,而且還親身參與了C++的演化和變革,對C++的變化和發(fā)展產(chǎn)生了重要的影響。
第0章 序幕 1
0.1 第 一次嘗試 1
0.2 不用類來實現(xiàn) 4
0.3 為什么用C++更簡單 5
0.4 一個更大的例子 5
0.5 小結(jié) 6
第 一篇 動 機
第 1章 為什么我用C++ 9
1.1 問題 9
1.2 歷史背景 10
1.3 自動軟件發(fā)布 10
1.4 進入C++ 13
1.5 重復(fù)利用的軟件 17
1.6 后記 18
第 2章 為什么用C++工作 19
2.1 小項目的成功 19
2.2 抽象 21
2.3 機器應(yīng)該為人服務(wù) 23
第3章 生活在現(xiàn)實世界中 25
第二篇 類和繼承
第4章 類設(shè)計者的核查表 31
第5章 代理類 39
5.1 問題 39
5.2 經(jīng)典解決方案 40
5.3 虛復(fù)制函數(shù) 41
5.4 定義代理類 42
5.5 小結(jié) 44
第6章 句柄:第 一部分 45
6.1 問題 45
6.2 一個簡單的類 46
6.3 綁定到句柄 47
6.4 獲取對象 48
6.5 簡單的實現(xiàn) 48
6.6 引用計數(shù)型句柄 49
6.7 寫時復(fù)制 51
6.8 討論 52
第7章 句柄:第二部分 55
7.1 回顧 56
7.2 分離引用計數(shù) 57
7.3 對引用計數(shù)的抽象 58
7.4 存取函數(shù)和寫時復(fù)制 61
7.5 討論 61
第8章 一個面向?qū)ο蟪绦蚍独?3
8.1 問題描述 63
8.2 面向?qū)ο蟮慕鉀Q方案 64
8.3 句柄類 67
8.4 擴展1:新操作 69
8.5 擴展2:增加新的節(jié)點類型 72
8.6 反思 73
第9章 一個課堂練習(xí)的分析(上) 75
9.1 問題描述 75
9.2 接口設(shè)計 77
9.3 補遺 79
9.4 測試接口 80
9.5 策略 81
9.6 方案 81
9.7 圖像的組合 85
9.8 小結(jié) 87
第 10章 一個課堂練習(xí)的分析(下) 89
10.1 策略 89
10.2 體驗設(shè)計的靈活性 102
10.3 小結(jié) 105
第 11章 什么時候不應(yīng)當使用虛函數(shù) 107
11.1 適用的情況 107
11.2 不適用的情況 108
11.3 析構(gòu)函數(shù)很特殊 113
11.4 小結(jié) 114
第三篇 模 板
第 12章 設(shè)計容器類 117
12.1 包含什么 117
12.2 復(fù)制容器意味著什么 118
12.3 怎樣獲取容器的元素 121
12.4 怎樣區(qū)分讀和寫 121
12.5 怎樣處理容器的增長 123
12.6 容器支持哪些操作 124
12.7 怎樣設(shè)想容器元素的類型 124
12.8 容器和繼承 125
12.9 設(shè)計一個類似數(shù)組的類 126
第 13章 訪問容器中的元素 131
13.1 模擬指針 131
13.2 獲取數(shù)據(jù) 132
13.3 遺留問題 135
13.4 指向const Array的Pointer 139
13.5 有用的增強操作 140
第 14章 迭代器 145
14.1 完成Pointer類 145
14.2 什么是迭代器 148
14.3 刪除元素 149
14.4 刪除容器 150
14.5 其他設(shè)計考慮 151
14.6 討論 151
第 15章 序列 153
15.1 技術(shù)狀況 153
15.2 基本的傳統(tǒng)觀點 154
15.3 增加一些額外操作 159
15.4 使用范例 162
15.5 再增加一些 166
15.6 請你思考 167
第 16章 作為接口的模板 169
16.1 問題 169
16.2 第 一個例子 170
16.3 分離迭代方式 170
16.4 遍歷任意類型 172
16.5 增加其他類型 173
16.6 將存儲技術(shù)抽象化 174
16.7 實證 177
16.8 小結(jié) 178
第 17章 模板和泛型算法 179
17.1 一個特例 180
17.2 泛型化元素類型 180
17.3 推遲計數(shù) 181
17.4 地址獨立性 183
17.5 查找非數(shù)組 184
17.6 討論 185
第 18章 泛型迭代器 187
18.1 一個不同的算法 187
18.2 需求的分類 189
18.3 輸入迭代器 190
18.4 輸出迭代器 190
18.5 前向迭代器 191
18.6 雙向迭代器 191
18.7 隨機存取迭代器 192
18.8 是繼承嗎 193
18.9 性能 193
18.10 小結(jié) 194
第 19章 使用泛型迭代器 195
19.1 迭代器類型 196
19.2 虛擬序列 196
19.3 輸出流迭代器 199
19.4 輸入流迭代器 200
19.5 討論 204
第 20章 迭代器配接器 205
20.1 一個例子 205
20.2 方向不對稱性 207
20.3 一致性和不對稱性 208
20.4 自動反向 209
20.5 討論 211
第 21章 函數(shù)對象 213
21.1 一個例子 213
21.2 函數(shù)指針 216
21.3 函數(shù)對象 218
21.4 函數(shù)對象模板 219
21.5 隱藏中間類型 220
21.6 一種類型包羅萬象 221
21.7 實現(xiàn) 222
21.8 討論 224
第 22章 函數(shù)配接器 225
22.1 為什么是函數(shù)對象 225
22.2 用于內(nèi)建操作符的函數(shù)對象 226
22.3 綁定者(Binders) 227
22.4 更深入地探討 228
22.5 接口繼承 229
22.6 使用這些類 230
22.7 討論 231
第四篇 庫
第 23章 日常使用的庫 235
23.1 問題 235
23.2 理解問題:第 1部分 237
23.3 實現(xiàn):第 1部分 237
23.4 理解問題:第 2部分 239
23.5 實現(xiàn):第 2部分 240
23.6 討論 242
第 24章 一個庫接口設(shè)計實例 243
24.1 復(fù)雜問題 244
24.2 優(yōu)化接口 245
24.3 溫故知新 246
24.4 編寫代碼 247
24.5 小結(jié) 249
第 25章 庫設(shè)計就是語言設(shè)計 251
25.1 字符串 251
25.2 內(nèi)存耗盡 252
25.3 復(fù)制 255
25.4 隱藏實現(xiàn) 257
25.5 缺省構(gòu)造函數(shù) 259
25.6 其他操作 260
25.7 子字符串 262
25.8 小結(jié) 263
第 26章 語言設(shè)計就是庫設(shè)計 265
26.1 抽象數(shù)據(jù)類型 265
26.2 庫和抽象數(shù)據(jù)類型 266
26.3 內(nèi)存分配 269
26.4 按成員賦值(memberwise assignment)和初始化 270
26.5 異常處理 272
26.6 小結(jié) 272
第五篇 技 術(shù)
第 27章 自己跟蹤自己的類 275
27.1 設(shè)計一個跟蹤類 275
27.2 創(chuàng)建死代碼 278
27.3 生成對象的審計跟蹤 279
27.4 驗證容器行為 281
27.5 小結(jié) 286
第 28章 在簇中分配對象 287
28.1 問題 287
28.2 設(shè)計方案 287
28.3 實現(xiàn) 290
28.4 加入繼承 292
28.5 小結(jié) 293
第 29章 應(yīng)用器、操縱器和函數(shù)對象 295
29.1 問題 295
29.2 一種解決方案 297
29.3 另一種不同的解決方案 298
29.4 多個參數(shù) 299
29.5 一個例子 301
29.6 簡化 302
29.7 思考 303
29.8 歷史記錄、參考資料和致謝 304
第30章 將應(yīng)用程序庫從輸入輸出中分離出來 305
30.1 問題 305
30.2 解決方案1:技巧加蠻力 306
30.3 解決方案2:抽象輸出 307
30.4 解決方案3:技巧而無蠻力 309
30.5 評論 311
第六篇 總 結(jié)
第31章 通過復(fù)雜性獲取簡單性 315
31.1 世界是復(fù)雜的 315
31.2 復(fù)雜性變得隱蔽 316
31.3 計算機也是一樣 316
31.4 計算機解決實際問題 317
31.5 類庫和語言語義 318
31.6 很難使事情變得容易 319
31.7 抽象和接口 320
31.8 復(fù)雜度的守恒 321
第32章 說了Hello world后再做什么 323
32.1 找當?shù)氐膶<摇?23
32.2 選一種工具包并適應(yīng)它 324
32.3 C的某些部分是必需的 324
32.4 C的其他部分不是必需的 325
32.5 給自己設(shè)一些問題 327
32.6 小結(jié) 329
附錄 Koenig和Moo夫婦訪談 331