C++沉思錄

C++沉思錄

C++編程方面的經典書籍,作者是一對享有盛譽的技術伉儷,Andrew Boeing和Barbar Moo。本書基於作者在知名技術雜誌發表的技術文章、世界各地發表的演講以及史丹福大學的課程講義整理、寫作而成,融聚了作者10多年C++程式生涯的真知灼見。全書分為大部分,共32章,分別對C++語言的歷史和特點、類和繼承、STL與泛型編程、庫的設計等幾大技術話題進行了詳細而深入的討論,細微之處幾乎涵蓋了C++所有的設計思想和技術細節。全書通過精心挑選的實例,向讀者傳達先進的程式設計的方法和理念。本書適合有一定C++編程經驗的程式設計師閱讀。

基本信息

圖書推薦

《C++沉思錄》適合有一定經驗的C++程式設計師閱讀學習,可以幫助讀者加強提高技術能力,成為C++程式設計的高手。

Koenig 和MOO的《C++沉思錄》將會為許多人提供有用的幫助。對於C++是什麼樣的以及能夠做些什麼,他們的先見之明在這本書里隨處可見。

作者簡介

Andrew Koenig 和 Barbara E.Moo是夫妻.

Andrew Koenig 是AT&T公司Shannon實驗室大規模編程研究部門中的成員,同時也是C++標準委員會的項目編輯。他的編程經驗超過30年,其中有15年在使用C++,他已經出版了超過150 篇和C++有關的論文,並且在世界範圍內就這個主題進行過多次演講。

Barbara E.Moo 是獨立諮詢顧問,在軟體領域中擁有超過20年的工作經驗的獨立諮詢顧問。在AT&Tm作的近15年中,她參與了第一個使用C++編寫的商業產品的開發,領導了公司中第一個C++編譯器項目,管理了AT&T中廣受讚譽的World Net Internet Service Business的開發。

圖書目錄

序幕 1

0.1 第一次嘗試 1

0.1.1 改進 2

0.1.2 另一種改進 3

0.2 不用類來實現 4

0.3 為什麼用C++更簡單 5

0.4 一個更大的例子 6

0.5 結論 6

第一篇 動機

第1章 為什麼我用C++ 11

1.1 問題 11

1.2 歷史背景 12

1.3 自動軟體發布 12

1.3.1 可靠性與通用性 13

1.3.2 為什麼用C 14

1.3.3 應付快速增長 15

1.4 進入C++ 15

1.5 重複利用的軟體 20

1.6 後記 21

第2章 為什麼用C++工作 23

2.1 小項目的成功 23

2.1.1 開銷 24

2.1.2 質疑軟體工廠 24

2.2 抽象 25

2.2.1 有些抽象不是語言的一部分 26

2.2.2 抽象和規範 26

2.2.3 抽象和記憶體管理 27

2.3 機器應該為人服務 28

第3章 生活在現實世界中 29

第二篇 類和繼承

第4章 類設計者的核查表 37

第5章 代理類 47

5.1 問題 47

5.2 經典解決方案 48

5.3 虛複製函式 49

5.4 定義代理類 50

5.5 小結 53

第6章 句柄:第一部分 55

6.1 問題 55

6.2 一個簡單的類 56

6.3 綁定到句柄 58

6.4 獲取對象 58

6.5 簡單的實現 59

6.6 引用計數型句柄 60

6.7 寫時複製 62

6.8 討論 63

第7章 句柄:第二部分 67

7.1 回顧 68

7.2 分離引用計數 69

7.3 對引用計數的抽象 70

7.4 存取函式和寫時複製 73

7.5 討論 73

第8章 一個面向對象程式範例 75

8.1 問題描述 75

8.2 面向對象的解決方案 76

8.3 句柄類 79

8.4 擴展1:新操作 82

8.5 擴展2:增加新的節點類型 85

8.6 反思 86

第9章 一個課堂練習的分析(上) 89

9.1 問題描述 89

9.2 接口設計 91

9.3 補遺 93

9.4 測試接口 94

9.5 策略 95

9.6 方案 96

9.7 圖像的組合 99

9.8 結論 102

第10章 一個課堂練習的分析(下) 103

10.1 策略 103

10.1.1 方案 104

10.1.2 記憶體分配 105

10.1.3 結構構造 107

10.1.4 顯示圖像 110

10.2 體驗設計的靈活性 116

10.3 結論 119

第11章 什麼時候不應當使用虛函式 121

11.1 適用的情況 121

11.2 不適用的情況 122

11.2.1 效率 122

11.2.2 你想要什麼樣的行為 125

11.2.3 不是所有的類都是通用的 127

11.3 析構函式很特殊 127

11.4 小結 129

第三篇 模板

第12章 設計容器類 133

12.1 包含什麼 133

12.2 複製容器意味著什麼 134

12.3 怎樣獲取容器的元素 137

12.4 怎樣區分讀和寫 138

12.5 怎樣處理容器的增長 139

12.6 容器支持哪些操作 141

12.7 怎樣構想容器元素的類型 141

12.8 容器和繼承 143

12.9 設計一個類似數組的類 144

第13章 訪問容器中的元素 151

13.1 模擬指針 151

13.2 獲取數據 153

13.3 遺留問題 155

13.4 指向const Array的Pointer 159

13.5 有用的增強操作 161

第14章 疊代器 167

14.1 完成Pointer類 167

14.2 什麼是疊代器 170

14.3 刪除元素 171

14.4 刪除容器 172

14.5 其他設計考慮 173

14.6 討論 174

第15章 序列 175

15.1 技術狀況 175

15.2 基本的傳統觀點 176

15.3 增加一些額外操作 181

15.4 使用範例 184

15.5 再增加一些 188

15.6 請你思考 190

第16章 作為接口的模板 191

16.1 問題 191

16.2 第一個例子 192

16.3 分離疊代方式 192

16.4 遍歷任意類型 195

16.5 增加其他類型 196

16.6 將存儲技術抽象化 196

16.7 實證 199

16.8 小結 200

第17章 模板和泛型算法 203

17.1 一個特例 204

17.2 泛型化元素類型 205

17.3 推遲計數 205

17.4 地址獨立性 207

17.5 查找非數組 208

17.6 討論 210

第18章 泛型疊代器 213

18.1 一個不同的算法 213

18.2 需求的分類 215

18.3 輸入疊代器 216

18.4 輸出疊代器 216

18.5 前向疊代器 217

18.6 雙向疊代器 218

18.7 隨機存取疊代器 218

18.8 是繼承嗎 220

18.9 性能 220

18.10 小結 221

第19章 使用泛型疊代器 223

19.1 疊代器類型 224

19.2 虛擬序列 224

19.3 輸出流疊代器 227

19.4 輸入流疊代器 229

19.5 討論 232

第20章 疊代器配接器 233

20.1 一個例子 233

20.2 方向不對稱性 235

20.3 一致性和不對稱性 236

20.4 自動反向 237

20.5 討論 240

第21章 函式對象 241

21.1 一個例子 241

21.2 函式指針 244

21.3 函式對象 246

21.4 函式對象模板 248

21.5 隱藏中間類型 249

21.6 一種類型包羅萬象 250

21.7 實現 251

21.8 討論 253

第22章 函式配接器 255

22.1 為什麼是函式對象 255

22.2 用於內建操作符的函式對象 256

22.3 綁定者(Binders) 257

22.4 更深入地探討 258

22.5 接口繼承 259

22.6 使用這些類 260

22.7 討論 261

第四篇 庫

第23章 日常使用的庫 265

23.1 問題 265

23.2 理解問題:第1部分 267

23.3 實現:第1部分 267

23.4 理解問題:第2部分 270

23.5 實現:第2 部分 270

23.6 討論 272

第24章 一個庫接口設計實例 275

24.1 複雜問題 276

24.2 最佳化接口 277

24.3 溫故知新 279

24.4 編寫代碼 280

24.5 結論 282

第25章 庫設計就是語言設計 283

25.1 字元串 283

25.2 記憶體耗盡 284

25.3 複製 287

25.4 隱藏實現 290

25.5 預設構造函式 292

25.6 其他操作 293

25.7 子字元串 295

25.8 結論 296

第26章 語言設計就是庫設計 297

26.1 抽象數據類型 297

26.1.1 構造函式與析構函式 297

26.1.2 成員函式及可見度控制 299

26.2 庫和抽象數據類型 299

26.2.1 類型安全的連結(linkage) 299

26.2.2 命名空間 300

26.3 記憶體分配 302

26.4 按成員賦值(memberwise assignment)和初始化 303

26.5 異常處理 305

26.6 小結 306

第五篇 技術

第27章 自己跟蹤自己的類 309

27.1 設計一個跟蹤類 309

27.2 創建死代碼 312

27.3 生成對象的審計跟蹤 313

27.4 驗證容器行為 315

27.5 小結 320

第28章 在簇中分配對象 321

28.1 問題 321

28.2 設計方案 321

28.3 實現 324

28.4 加入繼承 326

28.5 小結 327

第29章 套用器、操縱器和函式對象 329

29.1 問題 329

29.2 一種解決方案 332

29.3 另一種不同的解決方案 332

29.4 多個參數 334

29.5 一個例子 335

29.6 簡化 337

29.7 思考 338

29.8 歷史記錄、參考資料和致謝 339

第30章 將應用程式庫從輸入輸出中分離出來 341

30.1 問題 341

30.2 解決方案1:技巧加蠻力 342

30.3 解決方案2:抽象輸出 343

30.4 解決方案3:技巧,但無蠻力 345

30.5 評論 348

第六篇 總結

第31章 通過複雜性獲取簡單性 351

31.1 世界是複雜的 351

31.2 複雜性變得隱蔽 352

31.3 計算機也是一樣 353

31.4 計算機解決實際問題 354

31.5 類庫和語言語義 355

31.6 很難使事情變得容易 357

31.7 抽象和接口 357

31.8 複雜度的守恆 358

第32章 說了Hello world後再做什麼 361

32.1 找當地的專家 361

32.2 選一種工具包並適應它 362

32.3 C的某些部分是必需的 362

32.4 C的其他部分不是必需的 364

32.5 給自己設一些問題 366

32.6 結論 368

附錄 Koenig和Moo夫婦訪談 371

索引 377

相關詞條

相關搜尋

熱門詞條

聯絡我們