C++ Primer Plus 第六版

redufa發表於2024-12-02

封面 1
書名 3
版權 4
前言 5
目錄 11
第1章 預備知識 19
1.1 C++簡介 19
1.2 C++簡史 20
1.2.1 C語言 20
1.2.2 C語言程式設計原理 20
1.2.3 物件導向程式設計 21
1.2.4 C++和泛型程式設計 22
1.2.5 C++的起源 22
1.3 可移植性和標準 23
1.3.1 C++的發展 24
1.3.2 本書遵循的C++標準 24
1.4 程式建立的技巧 24
1.4.1 建立原始碼檔案 25
1.4.2 編譯和連結 26
1.5 總結 28
第2章 開始學習C++ 30
2.1 進入C++ 30
2.1.1 main()函式 31
2.1.2 C++註釋 33
2.1.3 C++前處理器和iostream檔案 34
2.1.4 標頭檔案名 34
2.1.5 名稱空間 35
2.1.6 使用cout進行C++輸出 36
2.1.7 C++原始碼的格式化 37
2.2 C++語句 39
2.2.1 宣告語句和變數 39
2.2.2 賦值語句 40
2.2.3 cout的新花樣 41
2.3 其他C++語句 41
2.3.1 使用cin 42
2.3.2 使用cout進行拼接 42
2.3.3 類簡介 43
2.4 函式 44
2.4.1 使用有返回值的函式 44
2.4.2 函式變體 47
2.4.3 使用者定義的函式 47
2.4.4 使用者定義的有返回值的函式 50
2.4.5 在多函式程式中使用using編譯指令 51
2.5 總結 52
2.6 複習題 53
2.7 程式設計練習 53
第3章 處理資料 55
3.1 簡單變數 55
3.1.1 變數名 56
3.1.2 整型 57
3.1.3 整型short、int、long和long long 57
3.1.4 無符號型別 61
3.1.5 選擇整型型別 63
3.1.6 整型字面值 63
3.1.7 C++如何確定常量的型別 65
3.1.8 char型別:字元和小整數 65
3.1.9 bool型別 71
3.2 const限定符 72
3.3 浮點數 73
3.3.1 書寫浮點數 73
3.3.2 浮點型別 74
3.3.3 浮點常量 76
3.3.4 浮點數的優缺點 76
3.4 C++算術運算子 77
3.4.1 運算子優先順序和結合性 78
3.4.2 除法分支 78
3.4.3 求模運算子 79
3.4.4 型別轉換 80
3.4.5 C++11中的auto宣告 84
3.5 總結 85
3.6 複習題 85
3.7 程式設計練習 86
第4章 複合型別 88
4.1 陣列 88
4.1.1 程式說明 90
4.1.2 陣列的初始化規則 91
4.1.3 C++11陣列初始化方法 91
4.2 字串 92
4.2.1 拼接字串常量 93
4.2.2 在陣列中使用字串 94
4.2.3 字串輸入 95
4.2.4 每次讀取一行字串輸入 96
4.2.5 混合輸入字串和數字 99
4.3 string類簡介 100
4.3.1 C++11字串初始化 101
4.3.2 賦值、拼接和附加 101
4.3.3 string類的其他操作 102
4.3.4 string類I/O 104
4.3.5 其他形式的字串字面值 105
4.4 結構簡介 106
4.4.1 在程式中使用結構 107
4.4.2 C++11結構初始化 109
4.4.3 結構可以將string類作為成員嗎 109
4.4.4 其他結構屬性 109
4.4.5 結構陣列 111
4.4.6 結構中的位欄位 112
4.5 共用體 112
4.6 列舉 113
4.6.1 設定列舉量的值 115
4.6.2 列舉的取值範圍 115
4.7 指標和自由儲存空間 115
4.7.1 宣告和初始化指標 118
4.7.2 指標的危險 119
4.7.3 指標和數字 120
4.7.4 使用new來分配記憶體 120
4.7.5 使用delete釋放記憶體 122
4.7.6 使用new來建立動態陣列 122
4.8 指標、陣列和指標算術 124
4.8.1 程式說明 125
4.8.2 指標小結 127
4.8.3 指標和字串 129
4.8.4 使用new建立動態結構 132
4.8.5 自動儲存、靜態儲存和動態儲存 135
4.9 型別組合 136
4.10 陣列的替代品 138
4.10.1 模板類vector 138
4.10.2 模板類array(C++11) 138
4.10.3 比較陣列、vector物件和array物件 138
4.11 總結 140
4.12 複習題 141
4.13 程式設計練習 141
第5章 迴圈和關係表示式 143
5.1 for迴圈 143
5.1.1 for迴圈的組成部分 144
5.1.2 回到for迴圈 149
5.1.3 修改步長 150
5.1.4 使用for迴圈訪問字串 151
5.1.5 遞增運算子(++)和遞減運算子(--) 151
5.1.6 副作用和順序點 152
5.1.7 字首格式和字尾格式 153
5.1.8 遞增/遞減運算子和指標 153
5.1.9 組合賦值運算子 154
5.1.10 複合語句(語句塊) 154
5.1.11 其他語法技巧——逗號運算子 156
5.1.12 關係表示式 158
5.1.13 賦值、比較和可能犯的錯誤 159
5.1.14 C-風格字串的比較 160
5.1.15 比較string類字串 162
5.2 while迴圈 163
5.2.1 for與while 165
5.2.2 等待一段時間:編寫延時迴圈 166
5.3 do while迴圈 168
5.4 基於範圍的for迴圈(C++11) 170
5.5 迴圈和文字輸入 170
5.5.1 使用原始的cin進行輸入 170
5.5.2 使用cin.get(char)進行補救 171
5.5.3 使用哪一個cin.get() 172
5.5.4 檔案尾條件 173
5.5.5 另一個cin.get()版本 175
5.6 巢狀迴圈和二維陣列 177
5.6.1 初始化二維陣列 178
5.6.2 使用二維陣列 178
5.7 總結 180
5.8 複習題 181
5.9 程式設計練習 181
第6章 分支語句和邏輯運算子 183
6.1 if語句 183
6.1.1 ifelse語句 185
6.1.2 格式化ifelse語句 186
6.1.3 ifelse ifelse結構 187
6.2 邏輯表示式 188
6.2.1 邏輯OR運算子:‖ 189
6.2.2 邏輯AND運算子:&& 190
6.2.3 用&&來設定取值範圍 192
6.2.4 邏輯NOT運算子:! 193
6.2.5 邏輯運算子細節 194
6.2.6 其他表示方式 195
6.3 字元函式庫cctype 195
6.4 ?:運算子 197
6.5 switch語句 198
6.5.1 將列舉量用作標籤 201
6.5.2 switch和ifelse 202
6.6 break和continue語句 203
6.7 讀取數字的迴圈 205
6.8 簡單檔案輸入/輸出 208
6.8.1 文字I/O和文字檔案 208
6.8.2 寫入到文字檔案中 209
6.8.3 讀取文字檔案 212
6.9 總結 215
6.10 複習題 216
6.11 程式設計練習 217
第7章 函式——C++的程式設計模組 220
7.1 複習函式的基本知識 220
7.1.1 定義函式 221
7.1.2 函式原型和函式呼叫 223
7.2 函式引數和按值傳遞 225
7.2.1 多個引數 226
7.2.2 另外一個接受兩個引數的函式 228
7.3 函式和陣列 230
7.3.1 函式如何使用指標來處理陣列 231
7.3.2 將陣列作為引數意味著什麼 231
7.3.3 更多陣列函式示例 233
7.3.4 使用陣列區間的函式 238
7.3.5 指標和const 239
7.4 函式和二維陣列 242
7.5 函式和C-風格字串 243
7.5.1 將C-風格字串作為引數的函式 243
7.5.2 返回C-風格字串的函式 245
7.6 函式和結構 246
7.6.1 傳遞和返回結構 246
7.6.2 另一個處理結構的函式示例 248
7.6.3 傳遞結構的地址 252
7.7 函式和string物件 253
7.8 函式與array物件 254
7.9 遞迴 256
7.9.1 包含一個遞迴呼叫的遞迴 257
7.9.2 包含多個遞迴呼叫的遞迴 258
7.10 函式指標 259
7.10.1 函式指標的基礎知識 259
7.10.2 函式指標示例 261
7.10.3 深入探討函式指標 262
7.10.4 使用typedef進行簡化 266
7.11 總結 266
7.12 複習題 267
7.13 程式設計練習 268
第8章 函式探幽 271
8.1 C++行內函數 271
8.2 引用變數 273
8.2.1 建立引用變數 274
8.2.2 將引用用作函式引數 276
8.2.3 引用的屬性和特別之處 278
8.2.4 將引用用於結構 281
8.2.5 將引用用於類物件 286
8.2.6 物件、繼承和引用 289
8.2.7 何時使用引用引數 292
8.3 預設引數 292
8.4 函式過載 294
8.4.1 過載示例 296
8.4.2 何時使用函式過載 298
8.5 函式模板 299
8.5.1 過載的模板 301
8.5.2 模板的侷限性 303
8.5.3 顯式具體化 303
8.5.4 例項化和具體化 306
8.5.5 編譯器選擇使用哪個函式版本 307
8.5.6 模板函式的發展 313
8.6 總結 315
8.7 複習題 315
8.8 程式設計練習 316
第9章 記憶體模型和名稱空間 318
9.1 單獨編譯 318
9.2 儲存持續性、作用域和連結性 322
9.2.1 作用域和連結 323
9.2.2 自動儲存持續性 323
9.2.3 靜態持續變數 327
9.2.4 靜態持續性、外部連結性 328
9.2.5 靜態持續性、內部連結性 331
9.2.6 靜態儲存持續性、無連結性 333
9.2.7 說明符和限定符 335
9.2.8 函式和連結性 336
9.2.9 語言連結性 337
9.2.10 儲存方案和動態分配 337
9.3 名稱空間 342
9.3.1 傳統的C++名稱空間 342
9.3.2 新的名稱空間特性 343
9.3.3 名稱空間示例 349
9.3.4 名稱空間及其前途 352
9.4 總結 353
9.5 複習題 353
9.6 程式設計練習 356
第10章 物件和類 358
10.1 過程性程式設計和麵向物件程式設計 358
10.2 抽象和類 359
10.2.1 型別是什麼 359
10.2.2 C++中的類 360
10.2.3 實現類成員函式 363
10.2.4 使用類 367
10.2.5 修改實現 368
10.2.6 小結 369
10.3 類的建構函式和解構函式 370
10.3.1 宣告和定義建構函式 371
10.3.2 使用建構函式 372
10.3.3 預設建構函式 372
10.3.4 解構函式 373
10.3.5 改進Stock類 374
10.3.6 建構函式和解構函式小結 380
10.4 this指標 381
10.5 物件陣列 386
10.6 類作用域 388
10.6.1 作用域為類的常量 389
10.6.2 作用域內列舉(C++11) 390
10.7 抽象資料型別 391
10.8 總結 394
10.9 複習題 395
10.10 程式設計練習 395
第11章 使用類 398
11.1 運算子過載 398
11.2 計算時間:一個運算子過載示例 399
11.2.1 新增加法運算子 402
11.2.2 過載限制 405
11.2.3 其他過載運算子 406
11.3 友元 408
11.3.1 建立友元 409
11.3.2 常用的友元:過載<<運算子 410
11.4 過載運算子:作為成員函式還是非成員函式 415
11.5 再談過載:一個向量類 416
11.5.1 使用狀態成員 422
11.5.2 為Vector類過載算術運算子 424
11.5.3 對實現的說明 426
11.5.4 使用Vector類來模擬隨機漫步 426
11.6 類的自動轉換和強制型別轉換 429
11.6.1 轉換函式 433
11.6.2 轉換函式和友元函式 437
11.7 總結 439
11.8 複習題 440
11.9 程式設計練習 440
第12章 類和動態記憶體分配 443
12.1 動態記憶體和類 443
12.1.1 複習示例和靜態類成員 443
12.1.2 特殊成員函式 450
12.1.3 回到Stringbad:複製建構函式的哪裡出了問題 452
12.1.4 Stringbad的其他問題:賦值運算子 454
12.2 改進後的新String類 455
12.2.1 修訂後的預設建構函式 456
12.2.2 比較成員函式 457
12.2.3 使用中括號表示法訪問字元 457
12.2.4 靜態類成員函式 459
12.2.5 進一步過載賦值運算子 459
12.3 在建構函式中使用new時應注意的事項 464
12.3.1 應該和不應該 465
12.3.2 包含類成員的類的逐成員複製 466
12.4 有關返回物件的說明 467
12.4.1 返回指向const物件的引用 467
12.4.2 返回指向非const物件的引用 467
12.4.3 返回物件 468
12.4.4 返回const物件 468
12.5 使用指向物件的指標 469
12.5.1 再談new和delete 471
12.5.2 指標和物件小結 472
12.5.3 再談定位new運算子 474
12.6 複習各種技術 477
12.6.1 過載<<運算子 477
12.6.2 轉換函式 478
12.6.3 其建構函式使用new的類 478
12.7 佇列模擬 478
12.7.1 佇列類 479
12.7.2 Customer類 486
12.7.3 ATM模擬 489
12.8 總結 493
12.9 複習題 494
12.10 程式設計練習 495
第13章 類繼承 498
13.1 一個簡單的基類 499
13.1.1 派生一個類 500
13.1.2 建構函式:訪問許可權的考慮 502
13.1.3 使用派生類 504
13.1.4 派生類和基類之間的特殊關係 506
13.2 繼承:is-a關係 507
13.3 多型公有繼承 508
13.4 靜態聯編和動態聯編 519
13.4.1 指標和引用型別的相容性 520
13.4.2 虛成員函式和動態聯編 521
13.4.3 有關虛擬函式注意事項 523
13.5 訪問控制:protected 525
13.6 抽象基類 526
13.6.1 應用ABC概念 528
13.6.2 ABC理念 534
13.7 繼承和動態記憶體分配 534
13.7.1 第一種情況:派生類不使用new 534
13.7.2 第二種情況:派生類使用new 535
13.7.3 使用動態記憶體分配和友元的繼承示例 537
13.8 類設計回顧 541
13.8.1 編譯器生成的成員函式 541
13.8.2 其他的類方法 542
13.8.3 公有繼承的考慮因素 545
13.8.4 類函式小結 548
13.9 總結 548
13.10 複習題 549
13.11 程式設計練習 549
第14章 C++中的程式碼重用 552
14.1 包含物件成員的類 552
14.1.1 valarray類簡介 553
14.1.2 Student類的設計 553
14.1.3 Student類示例 555
14.2 私有繼承 561
14.2.1 Student類示例(新版本) 561
14.2.2 使用包含還是私有繼承 567
14.2.3 保護繼承 567
14.2.4 使用using重新定義訪問許可權 568
14.3 多重繼承 569
14.3.1 有多少Worker 573
14.3.2 哪個方法 576
14.3.3 MI小結 585
14.4 類别範本 585
14.4.1 定義類别範本 586
14.4.2 使用模板類 588
14.4.3 深入探討模板類 590
14.4.4 陣列模板示例和非型別引數 595
14.4.5 模板多功能性 596
14.4.6 模板的具體化 600
14.4.7 成員模板 602
14.4.8 將模板用作引數 604
14.4.9 模板類和友元 606
14.4.10 模板別名(C++11) 611
14.5 總結 612
14.6 複習題 613
14.7 程式設計練習 615
第15章 友元、異常和其他 620
15.1 友元 620
15.1.1 友元類 620
15.1.2 友元成員函式 624
15.1.3 其他友元關係 627
15.1.4 共同的友元 628
15.2 巢狀類 629
15.2.1 巢狀類和訪問許可權 630
15.2.2 模板中的巢狀 631
15.3 異常 634
15.3.1 呼叫abort() 634
15.3.2 返回錯誤碼 635
15.3.3 異常機制 637
15.3.4 將物件用作異常型別 639
15.3.5 異常規範和C++11 642
15.3.6 棧解退 643
15.3.7 其他異常特性 647
15.3.8 exception類 649
15.3.9 異常、類和繼承 652
15.3.10 異常何時會迷失方向 657
15.3.11 有關異常的注意事項 659
15.4 RTTI 660
15.4.1 RTTI的用途 660
15.4.2 RTTI的工作原理 660
15.5 型別轉換運算子 667
15.6 總結 670
15.7 複習題 671
15.8 程式設計練習 672
第16章 string類和標準模板庫 673
16.1 string類 673
16.1.1 構造字串 673
16.1.2 string類輸入 677
16.1.3 使用字串 679
16.1.4 string還提供了哪些功能 683
16.1.5 字串種類 684
16.2 智慧指標模板類 685
16.2.1 使用智慧指標 686
16.2.2 有關智慧指標的注意事項 688
16.2.3 unique_ptr為何優於auto_ptr 690
16.2.4 選擇智慧指標 691
16.3 標準模板庫 692
16.3.1 模板類vector 693
16.3.2 可對向量執行的操作 694
16.3.3 對向量可執行的其他操作 698
16.3.4 基於範圍的for迴圈(C++11) 702
16.4 泛型程式設計 702
16.4.1 為何使用迭代器 703
16.4.2 迭代器型別 706
16.4.3 迭代器層次結構 707
16.4.4 概念、改進和模型 708
16.4.5 容器種類 713
16.4.4 關聯容器 720
16.4.5 無序關聯容器(C++11) 725
16.5 函式物件 725
16.5.1 函式符概念 725
16.5.2 預定義的函式符 728
16.5.3 自適應函式符和函式介面卡 729
16.6 演算法 731
16.6.1 演算法組 731
16.6.2 演算法的通用特徵 732
16.6.3 STL和string類 733
16.6.4 函式和容器方法 734
16.6.5 使用STL 735
16.7 其他庫 738
16.7.1 vector、valarray和array 738
16.7.2 模板initializer_list(C++11) 742
16.7.3 使用initializer_list 743
16.8 總結 745
16.9 複習題 746
16.10 程式設計練習 746
第17章 輸入、輸出和檔案 749
17.1 C++輸入和輸出概述 749
17.1.1 流和緩衝區 750
17.1.2 流、緩衝區和iostream檔案 751
17.1.3 重定向 753
17.2 使用cout進行輸出 754
17.2.1 過載的<<運算子 754
17.2.2 其他ostream方法 756
17.2.3 重新整理輸出緩衝區 758
17.2.4 用cout進行格式化 759
17.3 使用cin進行輸入 771
17.3.1 cin>>如何檢查輸入 772
17.3.2 流狀態 774
17.3.3 其他istream類方法 777
17.3.4 其他istream方法 782
17.4 檔案輸入和輸出 786
17.4.1 簡單的檔案I/O 786
17.4.2 流狀態檢查和is_open() 788
17.4.3 開啟多個檔案 789
17.4.4 命令列處理技術 790
17.4.5 檔案模式 791
17.4.6 隨機存取 799
17.5 核心格式化 806
17.6 總結 808
17.7 複習題 809
17.8 程式設計練習 810
第18章 探討C++新標準 813
18.1 複習前面介紹過的C++11功能 813
18.1.1 新型別 813
18.8.2 統一的初始化 813
18.1.3 宣告 814
18.1.4 智慧指標 816
18.1.5 異常規範方面的修改 816
18.1.6 作用域內列舉 817
18.1.7 對類的修改 817
18.1.8 模板和STL方面的修改 818
18.1.9 右值引用 819
18.2 移動語義和右值引用 820
18.2.1 為何需要移動語義 820
18.2.2 一個移動示例 821
18.2.3 移動建構函式解析 826
18.2.4 賦值 827
18.2.5 強制移動 827
18.3 新的類功能 831
18.3.1 特殊的成員函式 831
18.3.2 預設的方法和禁用的方法 832
18.3.3 委託建構函式 833
18.3.4 繼承建構函式 833
18.3.5 管理虛方法:override和final 835
18.4 Lambda函式 835
18.4.1 比較函式指標、函式符和Lambda函式 836
18.4.2 為何使用lambda 838
18.5 包裝器 840
18.5.1 包裝器function及模板的低效性 841
18.5.2 修復問題 843
18.5.3 其他方式 844
18.6 可變引數模板 845
18.6.1 模板和函式引數包 845
18.6.2 展開引數包 846
18.6.3 在可變引數模板函式中使用遞迴 846
18.7 C++11新增的其他功能 849
18.7.1 並行程式設計 849
18.7.2 新增的庫 849
18.7.3 低階程式設計 850
18.7.4 雜項 850
18.8 語言變化 850
18.8.1 Boost專案 851
18.8.2 TR1 851
18.8.3 使用Boost 851
18.9 接下來的任務 852
18.10 總結 852
18.11 複習題 853
18.12 程式設計練習 856
附錄A 計數系統 857
A.1 十進位制數 857
A.2 八進位制整數 857
A.3 十六進位制數 857
A.4 二進位制數 858
A.5 二進位制和十六進位制 859
附錄B C++保留字 860
B.1 C++關鍵字 860
B.2 替代標記 860
B.3 C++庫保留名稱 861
B.4 有特殊含義的識別符號 861
附錄C ASCII字符集 863
附錄D 運算子優先順序 867
附錄E 其他運算子 870
E.1 按位運算子 870
E.1.1 移位運算子 870
E.1.2 邏輯按位運算子 871
E.1.3 按位運算子的替代表示 873
E.1.4 幾種常用的按位運算子技術 874
E.2 成員解除引用運算子 875
E.3 alignof(C++11) 878
E.4 noexcept(C++11) 879
附錄F 模板類string 880
F.1 13種型別和一個常量 880
F.2 資料資訊、建構函式及其他 881
F.2.1 預設建構函式 883
F.2.2 使用C-風格字串的建構函式 883
F.2.3 使用部分C-風格字串的建構函式 883
F.2.4 使用左值引用的建構函式 884
F.2.5 使用右值引用的建構函式(C++11) 884
F.2.6 使用一個字元的n個副本的建構函式 885
F.2.7 使用區間的建構函式 885
F.2.8 使用初始化列表的建構函式(C++11) 886
F.2.9 記憶體雜記 886
F.3 字串存取 886
F.4 基本賦值 887
F.5 字串搜尋 887
F.5.1 find()系列 888
F.5.2 rfind()系列 888
F.5.3 find_first_of()系列 888
F.5.4 find_last_of()系列 889
F.5.5 find_first_not_of()系列 889
F.5.6 find_last_not_of()系列 889
F.6 比較方法和函式 890
F.7 字串修改方法 891
F.7.1 用於追加和相加的方法 891
F.7.2 其他賦值方法 892
F.7.3 插入方法 892
F.7.4 清除方法 893
F.7.5 替換方法 893
F.7.6 其他修改方法:copy()和swap() 894
F.8 輸出和輸入 894
附錄G 標準模板庫方法和函式 895
G.1 STL和C++11 895
G.1.1 新增的容器 895
G.1.2 對C++98容器所做的修改 895
G.2 大部分容器都有的成員 896
G.3 序列容器的其他成員 899
G.4 set和map的其他操作 901
G.4 無序關聯容器(C++11) 902
G.5 STL函式 904
G.5.1 非修改式序列操作 904
G.5.2 修改式序列操作 908
G.5.3 排序和相關操作 915
G.5.4 數值運算 925
附錄H 精選讀物和網上資源 927
H.1 精選讀物 927
H.2 網上資源 928
附錄I 轉換為ISO標準C++ 929
I.1 使用一些前處理器編譯指令的替代品 929
I.1.1 使用const而不是#define來定義常量 929
I.1.2 使用inline而不是#define來定義小型函式 930
I.2 使用函式原型 931
I.3 使用型別轉換 931
I.4 熟悉C++特性 931
I.5 使用新的標頭檔案 932
I.6 使用名稱空間 932
I.7 使用智慧指標 933
I.8 使用string類 933
I.9 使用STL 933
附錄J 複習題答案 934
第2章 複習題答案 934
第3章 複習題答案 934
第4章 複習題答案 935
第5章 複習題答案 937
第6章 複習題答案 937
第7章 複習題答案 938
第8章 複習題答案 940
第9章 複習題答案 942
第10章 複習題答案 943
第11章 複習題答案 945
第12章 複習題答案 945
第13章 複習題答案 947
第14章 複習題答案 948
第15章 複習題答案 949
第16章 複習題答案 950
第17章 複習題答案 951
第18章 複習題答案 953

相關文章