內容介紹
這是一部與眾不同的C++教程,它通過68個互動式講座,把龐大的C++知識體系劃分成若干小塊,使讀者可以快速學會C++。本書易學易用,讀者只須了解基本的編程概念(變數、函式、聲明等),而無須具備C或其他語言的背景知識,就可以輕鬆上手。本書的最大特色就是引導式教學,調動讀者參加互動學習,回答作者精心設計的問題,在實戰中學習、思考,溫故而知新,逐步掌握C++。面對C++的重重阻礙,68講幫助你勢如破竹,迅速成為成功而快樂的C++程式設計師。
作者介紹
RAY LISCHNER有30多年的編程經驗,使用過Algol、 APL、 Bash、 C、 C++、 COBOL、 csh、DCL、 Delphi、 Eiffel、 Fortran、 Haskell、 Icon、 Java、 LISP、 Pascal、 Perl、 PHP、 PL/I、 Python、 Ruby、Scheme、 Smalltalk等多種語言以及很多彙編器。著有C++ in a Nutshell(O’Reilly)等圖書。可以通過電子郵件([email protected])與他聯繫。作品目錄
第一部分 C++基礎第1講 打磨工具 2
1.1 作者推薦 2
1.1.1 Windows平台 2
1.1.2 Macintosh OS 9以及更早版本 3
1.1.3 其他平台 3
1.2 閱讀文檔 3
1.3 第一個程式 4
第2講 閱讀C++代碼 10
2.1 注釋 11
2.2 頭檔案 11
2.3 主程式 13
2.4 變數定義 13
2.5 語句 14
2.6 輸出 15
第3講 整數表達式 17
第4講 字元串 23
第5講 簡單的輸入 28
第6講 錯誤訊息 33
6.1 拼寫錯誤 34
6.2 錯誤字元 34
6.3 未知操作符 35
6.4 未知名字 35
6.5 符號錯誤 36
6.6 從錯誤中獲得樂趣 36
第7講 For循環 37
7.1 有界循環 37
7.1.1 初始化 37
7.1.2 條件 38
7.1.3 後循環 39
7.1.4 for循環的工作原理 39
7.2 由你來做 39
第8講 格式化輸出 41
8.1 問題 41
8.2 欄位寬度 42
8.3 填充 43
8.4 std前綴 44
8.5 對齊 44
8.6 探索格式化 44
8.7 替代語法 46
8.8 由你完成 46
第9講 數組和向量 49
9.1 用向量代替數組 49
9.2 向量 50
9.3 疊代器 51
9.4 算法 53
9.5 成員類型 54
9.6 使用疊代器和算法 55
第10講 自增和自減 58
10.1 自增 58
10.2 自減 59
第11講 條件和邏輯 64
11.1 I/O和bool 64
11.2 布爾類型 65
11.3 邏輯操作符 67
11.4 舊式語法 68
11.5 比較操作符 68
第12講 複合語句 71
12.1 語句 71
12.2 局部定義和範圍 74
12.3 for循環頭中的定義 76
第13講 檔案I/O簡介 79
13.1 讀檔案 79
13.2 寫檔案 80
第14講 數據結構映射 83
14.1 使用映射 83
14.2 疊代器 84
14.3 搜尋映射 86
第15講 類型同義詞 88
15.1 typedef聲明 88
15.2 常見的類型定義 89
第16講 字元 91
16.1 字元類型 91
16.2 字元I/O 93
16.3 換行和移植性 94
16.4 轉義字元 94
第17講 字元分類 96
17.1 字元集 96
17.2 字元分類 98
17.3 區域設定 99
第18講 大小寫轉換 103
18.1 簡單的大小寫 103
18.2 複雜的大小寫 104
第19講 編寫函式 107
19.1 函式 107
19.2 函式調用 109
19.3 聲明和定義 109
19.4 再談單詞計數 111
19.5 函式main() 113
第20講 函式實參 115
20.1 實參傳遞 115
20.2 按引用傳遞 117
20.3 常量引用 119
20.4 const_iterator 120
20.5 輸出參數 121
第21講 使用算法 122
21.1 傳遞數據 122
21.2 謂詞 126
21.3 其他算法 128
第22講 重載函式名 131
第23講 大數和小數 136
23.1 長整型和短整型 136
23.1.1 長整數 137
23.1.2 短整數 137
23.2 整數字面量 138
23.3 位元組長度的整數 139
23.4 類型轉換 140
23.5 整數算術 141
23.6 重載解析 142
第24講 極大數和極小數 145
24.1 浮點數 145
24.2 浮點字面量 146
24.3 浮點特徵 147
24.4 浮點I/O 148
第25講 文檔 151
25.1 Doxygen 151
25.2 結構化注釋 151
25.3 文檔標籤 152
25.4 使用Doxygen 156
第26講 項目1:身體質量指數 157
第二部分 自定義類型
第27講 自定義類型 160
27.1 定義新類型 160
27.2 成員函式 161
27.3 構造函式 164
27.4 重載構造函式 166
第28講 重載操作符 167
28.1 比較有理數 167
28.2 算術操作符 171
28.3 數學函式 173
第29講 自定義I/O操作符 175
29.1 輸入操作符 175
29.2 輸出操作符 176
29.3 錯誤狀態 177
第30講 賦值與初始化 179
30.1 賦值操作符 179
30.2 構造函式 180
30.3 合併 181
第31講 編寫類 186
31.1 類的結構 186
31.2 成員函式 187
31.3 構造函式 189
第32講 深入探索成員函式 193
32.1 調用默認構造函式 193
32.2 重溫Project 1 196
32.3 const成員函式 199
第33講 訪問級別 203
33.1 公有與私有 203
33.2 class與struct 206
33.3 簡單的舊式數據 206
33.4 公有還是私有 207
第34講 面向對象編程介紹 212
34.1 書籍與雜誌 212
34.2 分類 213
34.3 繼承 215
34.4 Liskov置換原則 216
34.5 類型多態 216
第35講 繼承 218
35.1 派生類 218
35.2 析構函式 221
35.3 訪問級別 224
35.4 編程風格 225
第36講 虛函式 226
36.1 類型多態 226
36.2 虛函式 229
36.3 引用與切除 230
36.4 純虛函式 231
36.5 虛析構函式 232
第37講 類與類型 233
37.1 類與typedef 233
37.2 值類型 236
37.2.1 複製 236
37.2.2 賦值 236
37.2.3 比較 236
37.3 資源獲取即為初始化 239
第38講 聲明與定義 241
38.1 聲明與定義 241
38.2 內聯函式 243
38.3 變數聲明與定義 244
38.4 靜態變數 246
38.5 靜態數據成員 248
38.6 聲明符 250
第39講 使用多個源檔案 251
39.1 多個源檔案 251
39.2 聲明與定義 252
39.3 #include檔案 254
39.3.1 引號與括弧 256
39.3.2 嵌套#include指令 256
39.3.3 包含監護 257
39.3.4 文檔 258
39.4 外部變數 261
39.5 內聯函式 261
39.6 “一份定義”規則 262
第40講 函式對象 264
40.1 函式調用操作符 264
40.2 函式對象 265
40.3 復用成員函式 269
40.4 生成器函子 270
第41講 有用的算法 272
41.1 搜尋 272
41.1.1 線性搜尋算法 272
41.1.2 二分搜尋算法 276
41.2 比較 279
41.3 重組織數據 281
41.4 複製數據 282
41.5 刪除元素 283
41.6 疊代器 284
第42講 疊代器 285
42.1 疊代器的種類 285
42.1.1 輸入疊代器 286
42.1.2 輸出疊代器 286
42.1.3 前向疊代器 286
42.1.4 雙向疊代器 287
42.1.5 隨機訪問疊代器 287
42.2 使用疊代器工作 288
42.3 const_iterator與const iterator 290
42.4 錯誤訊息 292
42.5 專用疊代器 292
42.6 疊代器要點 294
第43講 異常 296
43.1 異常介紹 296
43.2 捕獲異常 297
43.3 拋出異常 299
43.4 程式棧 300
43.5 標準異常 304
43.6 I/O異常 304
43.7 自定義異常 306
43.8 對異常的建議 307
第44講 更多操作符 309
44.1 條件操作符 309
44.2 短路操作符 311
44.3 逗號操作符 311
44.4 算術賦值操作符 313
44.5 自增與自減 315
第45講 項目2:定點數 318
第三部分 泛型編程
第46講 函式模板 324
46.1 泛型函式 324
46.2 使用函式模板 325
46.3 編寫函式模板 326
46.4 模板形參 328
46.5 模板實參 329
46.6 聲明與定義 331
46.7 成員函式模板 331
第47講 類模板 333
47.1 參數化類型 333
47.2 參數化rational類 334
47.3 使用類模板 336
47.4 重載的操作符函式 338
47.5 混合類型 340
第48講 模板特化 342
48.1 實例化與特化 342
48.2 自定義比較函式 345
48.3 特化函式模板 346
48.4 特徵 347
第49講 部分特化 349
49.1 退化的pair 349
49.2 部分特化 350
49.3 部分特化函式模板 351
49.4 值模板形參 351
第50講 名字與名字空間 353
50.1 名字空間 353
50.2 嵌套名字空間 355
50.3 全局名字空間 358
50.4 名字空間std 358
50.5 使用名字空間 359
50.5.1 using指令 359
50.5.2 using聲明 361
50.5.3 類中的using聲明 363
50.6 無名名字空間 364
50.7 名字查找 365
第51講 容器 370
51.1 容器的性質 370
51.2 技術報告1 371
51.3 成員類型 372
51.4 容器里能放什麼 373
51.5 插入與清除 374
51.5.1 順序容器的插入操作 374
51.5.2 順序容器的清除操作 375
51.5.3 關聯容器的插入操作 375
51.5.4 關聯容器的清除操作 376
51.5.5 異常 377
51.6 疊代器與引用 377
51.7 順序容器 380
51.7.1 類模板array 381
51.7.2 類模板deque 382
51.7.3 類模板list 383
51.7.4 類模板vector 384
51.8 關聯容器 385
第52講 國際字元 389
52.1 為何要“寬” 389
52.2 使用寬字元 389
52.3 寬字元串 390
52.4 寬字元的I/O操作 392
52.5 多位元組字元集 393
52.6 Unicode 394
52.7 通用字元名字 396
第53講 區域設定與分面 397
53.1 問題 397
53.2 拯救者“區域設定” 398
53.3 區域設定與I/O 399
53.4 分面 399
53.5 字元類別 402
53.6 排序規則 406
第54講 文本I/O 410
54.1 檔案模式 410
54.2 字元串流 411
54.3 文本轉換 417
54.4 Boost詞法轉換 420
第55講 項目3:貨幣類型 422
第四部分 實時編程
第56講 指針 424
56.1 問題 424
56.2 解決方案 432
56.3 地址與指針 433
56.4 依賴圖 434
第57講 動態記憶體 437
57.1 分配記憶體 437
57.2 釋放記憶體 438
57.3 指向為空的指針 438
57.4 實現標準容器 440
57.5 增加變數 441
57.6 特殊成員函式 448
第58講 異常—安全 452
58.1 記憶體泄漏 452
58.2 異常與動態記憶體 454
58.3 自動刪除指針 456
58.4 auto_ptr不能做的事 458
58.5 異常與構造函式 458
第59講 舊式數組 462
59.1 C風格的數組 462
59.2 數組的限制 463
59.3 動態分配數組 464
59.4 多維數組 465
59.5 C風格的字元串 466
59.6 命令行參數 466
59.7 指針運算 468
第60講 智慧型指針 470
60.1 重新審視auto_ptr 470
60.2 可複製智慧型指針 472
60.3 智慧型數組 474
60.4 Pimpl 474
60.5 疊代器 482
第61講 位操作 483
61.1 將整數作為位的集合 483
61.2 位掩碼 485
61.3 移位 486
61.4 使用無符號類型安全移位 487
61.4.1 有符號與無符號類型 488
61.4.2 無符號字面量 488
61.4.3 類型轉換 489
61.5 溢出 493
61.6 位域簡介 493
61.7 可移植性 494
61.8 bitset類模板 495
第62講 枚舉 498
62.1 理想的枚舉 498
62.2 作為位掩碼的枚舉 499
62.3 模擬枚舉 500
62.3.1 枚舉計算機語言 500
62.3.2 對語言進行比較 501
62.3.3 賦值 502
62.3.4 字元串和語言 503
62.3.5 初始化 508
62.3.6 讀寫語言 508
62.3.7 使用模擬的枚舉 509
62.4 重新審視項目 510
第63講 多重繼承 512
63.1 多重基類 512
63.2 虛基類 514
63.3 類Java接口 516
63.4 接口與模板 518
63.5 Mix-in 519
63.6 友元來幫忙 521
第64講 特徵萃取與策略 524
64.1 案例研究:疊代器 524
64.2 疊代器特徵萃取 528
64.3 案例研究:char_traits 529
64.4 基於策略的編程 530
第65講 名字與模板 538
65.1 限定名的問題 538
65.2 非限定名的問題 540
第66講 重載函式 546
66.1 重載函式回顧 546
66.2 重載解析 549
66.2.1 候選函式 549
66.2.2 可行函式 551
66.2.3 最佳可行函式 551
66.3 默認實參 555
第67講 元編程 557
67.1 編譯時編程 557
67.2 模板特化 557
67.3 部分特化 559
第68講 項目4:計算器 566