精通C++(第9版)
作 者: (美)托尼·加迪斯(Tony Gaddis),(美)朱迪·沃爾特斯(Judy Walters),(美)戈德弗雷·穆甘達(Godfrey Muganda) 著 黃剛 等 譯
定 價: 198
出?版?社: 清華大學出版社出版社
出版日期: 2018年09月01日
頁 數: 1214
裝 幀: 平裝
ISBN: 9787302503163
●章 計算機和編程簡介 1
1.1 為什麼要使用程序 1
1.2 計算機繫統:硬件和軟件 2
1.2.1 硬件 2
1.2.2 軟件 5
1.2.3 思考題 6
1.3 程序和編程語言 6
1.3.1 程序的定義 7
1.3.2 編程語言 8
1.3.3 源代碼、目標代碼和可執行代碼 9
1.3.4 思考題 11
1.4 程序的組成 11
1.4.1素 11
1.4.2 代碼行和語句 13
1.4.3 變量 14
1.4.4 變量定義 14
1.5 輸入、處理和輸出 15
思考題 15
1.6 編程過程 16
1.6.1 設計和創建程序 16
1.6.2 軟件工程的定義 19
1.6.3 思考題 20
1.7 綜合演練:顯示個性化消息 20
1.7.1 復習和練習 21
1.7.2 編程挑戰 23
第2章 C++簡介 24
2.1 C++程序的部件 24
思考題 27
2.2 cout對像 27
2.3 #include指令 32
思考題 33
2.4 變量和賦值語句 33
2.5 常數 35
2.5.1 有時數字並不是數字 36
2.5.2 思考題 36
2.6 標識符 37
2.7 整型數據類型 39
2.7.1 整數和長整型常數 42
2.7.2 十六進制和八進制常數 43
2.7.3 思考題 43
2.8 浮點數據類型 44
2.8.1 浮點常數 45
2.8.2 將浮點值分配給整型變量 46
2.8.3 思考題 47
2.9 char數據類型 47
2.10 C ++ string類 51
2.10.1 使用string類 51
2.10.2 思考題 52
2.11 bool數據類型 52
2.12 確定數據類型的大小 53
2.13 變量賦值和初始化詳解 54
2.14 作用域 56
2.15 算術運算符 56
思考題 60
2.16 注釋 60
2.16.1 單行注釋 61
2.16.2 多行注釋 61
2.17 編程風格 62
2.18 綜合演練:笑臉! 63
2.18.1 復習和練習 64
2.18.2 編程挑戰 68
第3章 表達式和交互 71
3.1 cin對像 71
3.1.1 輸入多個值 74
3.1.2 思考題 76
3.2 數學表達式 77
3.2.1 運算符的優先級 79
3.2.2 關聯性 80
3.2.3 用圓括號分組 80
3.2.4 將代數表達式轉換為編程語句 81
3.2.5 指數問題詳解 81
3.2.6 思考題 83
3.3 數據類型轉換和類型強制轉換 85
3.3.1 類型強制轉換 86
3.3.2 思考題 89
3.4 溢出和下溢 90
3.5 命名常量 91
思考題 93
3.6 多變量和組合賦值 94
3.6.1 組合賦值運算符 94
3.6.2 思考題 96
3.7 格式化輸出 97
3.7.1 setprecision操作符 100
3.7.2 fixed操作符 103
3.7.3 showpoint操作符 104
3.7.4 left和right操作符 105
3.7.5 思考題 107
3.8 處理字符和字符串 107
3.8.1 輸入字符串 108
3.8.2 輸入一個字符 110
3.8.3 使用cin.get 110
3.8.4 混合使用cin>>和cin.get 112
3.8.5 使用cin.ignore 112
3.8.6 實用的string成員函數和運算符 113
3.8.7 使用C字符串 115
3.8.8 為C字符串賦值 116
3.8.9 跟蹤一個C字符串的大小 117
3.8.10 讀取一行輸入 119
3.8.11 思考題 120
3.9 更多數學庫函數 120
3.10 隨機數字 122
3.10.1 限制隨機數的範圍 125
3.10.2 思考題 125
3.11 關於調試:手動跟蹤程序 126
3.12 Green Fields Landscaping案例研究——部分 127
3.12.1 問題陳述 127
3.12.2 程序設計 128
3.12.3 程序 128
3.12.4 General Crates公司案例研究 130
3.13 綜合演練:單詞遊戲 130
3.13.1 復習和練習 132
3.13.2 編程挑戰 137
第4章 條件選擇 143
4.1 關繫運算符 143
4.1.1 關繫的值 144
4.1.2 真值和假值 145
4.1.3 思考題 147
4.2 if語句 148
4.2.1 編程風格和if語句 151
4.2.2 要注意的3個常見錯誤 151
4.2.3 真值詳解 153
4.2.4 標記 154
4.2.5 整數標記 155
4.2.6 思考題 155
4.3 if-else語句 156
4.3.1 使用if 或if-else的時機 157
4.3.2 比較浮點數 159
4.3.3 思考題 161
4.4 if-else if語句 161
4.4.1 使用結尾else 166
4.4.2 思考題 167
4.5 菜單驅動程序 168
4.6 嵌套if語句 170
思考題 173
4.7 邏輯運算符 174
4.7.1 &&運算符 174
4.7.2 || 運算符 176
4.7.3 ! 運算符 178
4.7.4 布爾變量和?!運算符 179
4.7.5 邏輯運算符的優先級和關聯性 181
4.7.6 使用邏輯運算符檢查數字範圍 182
4.7.7 思考題 182
4.8 驗證用戶輸入 183
4.9 塊和作用域詳解 185
4.9.1 同名變量 186
4.9.2 思考題 187
4.10 字符和字符串詳解 188
4.10.1 比較字符 188
4.10.2 比較string對像 189
4.10.3 測試字符 191
4.10.4 思考題 193
4.11 條件運算符 194
4.11.1 使用條件表達式的值 195
4.11.2 思考題 197
4.12 switch語句 197
4.12.1 在菜單驅動繫統中使用switch 203
4.12.2 思考題 205
4.13 枚舉數據類型 206
思考題 209
4.14 關於測試和調試:驗證輸出結果 210
4.15 Green Fields Landscaping案例研究——第2部分 212
4.15.1 問題陳述 212
4.15.2 程序設計 213
4.15.3 程序 214
4.15.4 Crazy A1的計算機商業案例研究 216
4.16 綜合演練:算命遊戲 217
4.16.1 復習和練習 218
4.16.2 編程挑戰 222
第5章 循環 228
5.1 循環介紹:while循環 228
5.1.1 while循環 228
5.1.2 while是一個預測試循環 230
5.1.3 無限循環 231
5.1.4 編程風格和while循環 232
5.1.5 思考題 234
5.2 使用while循環驗證輸入 235
5.3 遞增和遞減運算符 237
5.3.1 後綴和前綴模式 239
5.3.2 在數學表達式中使用遞增和遞減運算符 241
5.3.3 在關繫表達式中使用遞增和遞減運算符 241
5.3.4 思考題 242
5.4 計數器 243
5.5 保持累計彙總 245
5.6 標記符號 247
思考題 248
5.7 do-while循環 249
5.7.1 toupper函數 251
5.7.2 與菜單一起使用do-while 252
5.7.3 思考題 254
5.8 for循環 254
5.8.1 for循環是一個預測試循環 257
5.8.2 避免修改for循環體中的計數器變量 257
5.8.3 更新表達式的其他形式 258
5.8.4 定義for循環初始化表達式中的變量 258
5.8.5 創建用戶控制的for循環 258
5.8.6 在初始化和更新表達式中使用多個語句 259
5.8.7 省略for循環的表達式或循環體 260
5.8.8 思考題 260
5.9 關於軟件工程:決定使用哪個循環 261
5.9.1 while循環 261
5.9.2 do-while循環 262
5.9.3 for循環 262
5.10 嵌套循環 262
5.11 打破循環 265
5.11.1 在嵌套循環中使用break 266
5.11.2 continue語句 267
5.11.3 思考題 268
5.12 使用文件進行數據存儲 269
5.12.1 文件類型 270
5.12.2 文件訪問方法 271
5.12.3 文件名和文件流對像 271
5.12.4 為輸入輸出文件設置程序 272
5.12.5 創建文件流對像並打開文件 273
5.12.6 關閉文件 274
5.12.7 將數據寫入文件 274
5.12.8 從文件讀取數據 276
5.12.9 讀取位置 278
5.12.10 讓用戶指定一個文件名 279
5.12.11 使用舊版本C++中的c_str成員函數 280
5.12.12 檢測文件的末尾 280
5.12.13 測試文件打開的錯誤 282
5.12.14 思考題 284
5.13 關於測試和調試:創建良好的測試數據 284
5.14 Central Mountain Credit Union案例研究 287
5.14.1 問題陳述 287
5.14.2 計算 287
5.14.3 變量 287
5.14.4 程序設計 288
5.14.5 詳細偽代碼 288
5.14.6 程序 289
5.14.7 測試程序 291
5.14.8 Lightening Lanes案例研究 291
5.15 綜合演練:多彩世界 291
5.15.1 復習和練習 294
5.15.2 編程挑戰 299
第6章 函數 305
6.1 模塊化編程 305
6.2 定義和調用函數 306
6.2.1 空函數 307
6.2.2 調用函數 307
6.2.3 思考題 313
6.3 函數原型 314
6.4 將數據發送到函數中 315
6.5 按值傳遞數據 320
思考題 322
6.6 使用return語句 323
6.7 從函數返回值 325
6.7.1 定義一個返回值函數 325
6.7.2 調用返回值函數 326
6.8 返回一個布爾值 330
思考題 332
6.9 在菜單驅動程序中使用函數 332
6.10 局部變量和全局變量 336
6.10.1 局部變量 336
6.10.2 局部變量生存期 338
6.10.3 使用形參值初始化本地變量 338
6.10.4 全局變量 338
6.10.5 全局常數 340
6.10.6 具有相同名稱的局部變量和全局變量 342
6.11 靜態局部變量 343
思考題 345
6.12 默認實參 346
6.13 使用引用變量作為形參 349
6.13.1 按引用傳遞實參和按值傳遞實參的時機 353
6.13.2 將文件傳遞給函數 355
6.13.3 思考題 358
6.14 重載函數 359
6.15 使用exit()函數 364
思考題 365
6.16 樁模塊和驅動模塊 366
6.17 小樂透案例研究 369
6.17.1 問題陳述 369
6.17.2 程序設計 369
6.17.3 程序 371
6.17.4 High Adventrue Travel Agency旅行社案例研究 374
6.18 綜合演練:發光的南瓜燈 374
6.18.1 復習和練習 378
6.18.2 編程挑戰 381
第7章 類和對像簡介 388
7.1 抽像數據類型 388
7.1.1 抽像 388
7.1.2 在軟件開發中使用抽像 389
7.1.3 抽像數據類型 389
7.2 面向對像編程 389
7.3 關於類的介紹 391
7.3.1 使用已經知道的類 391
7.3.2 創建自己的類 392
7.3.3 訪問修飾符 393
7.3.4 private和public成員的位置 393
7.4 創建和使用對像 394
7.4.1 訪問對像的成員 395
7.4.2 訪問器和設置器 396
7.5 定義成員函數 397
7.5.1 類成員函數的命名約定 399
7.5.2 避免陳舊數據 402
7.5.3 內聯函數詳解 402
7.5.4 思考題 403
7.6 構造函數 403
7.6.1 重載構造函數 407
7.6.2 默認構造函數 408
7.7 析構函數 409
思考題 410
7.8 私有成員函數 412
7.9 將對像傳遞給函數 415
7.9.1 常量引用形參 418
7.9.2 從函數返回一個對像 419
7.9.3 思考題 422
7.10 對像組合 422
思考題 425
7.11 關於軟件工程:分離類規範、實現和客戶端代碼 426
7.11.1 使用多個文件的優點 431
7.11.2 在類對像中執行輸入輸出 432
7.11.3 思考題 432
7.12 結構 432
7.12.1 訪問結構成員 433
7.12.2 顯示和比較結構變量 435
7.12.3 初始化結構 436
7.12.4 嵌套結構 437
7.12.5 思考題 440
7.12.6 將結構傳遞給函數 441
7.12.7 從函數返回一個結構 443
7.12.8 思考題 444
7.13 枚舉數據類型詳解 445
7.13.1 在同一個語句中聲明enum數據類型並定義變量 445
7.13.2 將整數賦值給enum變量 445
7.13.3 將枚舉量賦值給int變量 446
7.13.4 使用數學運算符改變enum變量的值 446
7.13.5 使用枚舉量輸出值 446
7.13.6 使用枚舉量控制循環 447
7.13.7 使用C++ 11中的強類型enum 448
7.14 Home Software公司OOP案例研究 449
7.14.1 私有成員變量 450
7.14.2 公共成員函數 450
7.14.3 類聲明 450
7.14.4 withdraw會員函數 451
7.14.5 類接口 452
7.14.6 實現類 452
7.15 面向對像分析與設計介紹 456
7.15.1 尋找類 459
7.15.2 確定類的責任 462
7.15.3 這僅僅是個開始 465
7.15.4 對像的可重用性 465
7.15.5 面向對像與基於對像的編程 465
7.15.6 思考題 465
7.16 屏幕控制 466
7.16.1 屏幕光標定位 466
7.16.2 創建一個屏幕輸入表單 469
7.17 綜合演練:溜溜球動畫 471
7.17.1 復習和練習 473
7.17.2 編程挑戰 479
第8章 數組 486
8.1 保存多個值的數組 486
8.2 訪素 488
8.3 輸入和顯示數組內容 489
8.3.1 將數據從文件讀入數組 491
8.3.2 將數組的內容寫入文件 493
8.3.3 C++中沒有數組邊界檢查 493
8.3.4 注意大小差一錯誤 495
8.3.5 思考題 496
8.4 數組初始化 497
8.4.1 素1開始 501
8.4.2 數組部分初始化 501
8.4.3 隱式數組大小 503
8.4.4 初始化變量的新方法 503
8.5 基於範圍的for循環 504
8.6 處理數組內容 507
8.6.1 復制一個數組到另一個 509
8.6.2 比較兩個數組 510
8.6.3 對數字數組中的值求和 511
8.6.4 查找數字數組中數值的平均值 511
8.6.5 在數字數組中查找最高值和最低值 512
8.6.6 部分填充數組 514
8.6.7 為什麼要使用數組 515
8.6.8 處理字符串 517
8.7 使用並行數組 519
思考題 521
8.8 typedef聲明 523
8.9 數組作為函數參數 523
8.9.1 使用const數組形參 529
8.9.2 一些有用的數組函數 529
8.9.3 思考題 532
8.10 二維數組 533
8.10.1 將二維數組傳遞給函數 537
8.10.2 對二維數組素求和 539
8.10.3 對二維數組的行求和 539
8.10.4 對二維數組的列求和 540
8.11 三維或三維以上數組 541
思考題 543
8.12 矢量 544
8.12.1 定義和初始化矢量 545
8.12.2 存儲和檢索矢量中的值 546
8.12.3 使用C++ 11中基於範圍的for循環和vector 548
8.12.4 使用push_back成員函數 549
8.12.5 確定矢量的大小 550
8.12.6 從矢量素 552
8.12.7 清理矢量 553
8.12.8 檢測一個空矢量 554
8.12.9 矢量成員函數彙總 556
8.12.10 思考題 556
8.13 對像數組* 557
8.13.1 思考題 562
8.13.2 結構數組 563
8.13.3 思考題 566
8.14 National Commerce Bank案例研究 567
8.15 綜合演練:石頭、剪刀、布 569
8.15.1 復習和練習 571
8.15.2 編程挑戰 575
第9章 搜索、排序和算法分析 585
9.1 搜索算法簡介 585
9.1.1 線性搜索 585
9.1.2 二分搜索 588
9.2 搜索對像數組 591
思考題 595
9.3 排序算法簡介 595
9.3.1 冒泡排序 595
9.3.2 選擇排序 599
9.3.3 思考題 604
9.4 對像數組排序 604
9.5 矢量排序和搜索 607
9.6 算法分析簡介 609
9.6.1 計算問題和基本步驟 610
9.6.2 算法的復雜度 611
9.6.3 算法的最壞情況下的復雜度 613
9.6.4 平均情況下的復雜度 615
9.6.5 漸近復雜度與大O表示法 615
9.6.6 思考題 617
9.7 案例研究 617
9.8 綜合演練:秘密消息 617
9.8.1 復習和練習 622
9.8.2 編程挑戰 623
0章 指針 627
10.1 指針和地址運算符 627
10.2 指針變量 629
10.3 數組與指針之間的關繫 632
10.4 指針的算術運算 637
10.5 初始化指針 638
思考題 640
10.6 比較指針 641
10.7 使用指針作為函數形參 643
10.8 指向常量的指針和常量指針 647
10.8.1 指向常量的指針 647
10.8.2 將一個非常量實參傳遞到一個指向常量的指針中 648
10.8.3 常量指針 649
10.8.4 指向常量的常量指針 651
10.9 關於軟件工程:動態內存分配 651
10.10 關於軟件工程:從函數返回指針 655
10.10.1 停止內存洩漏 658
10.10.2 思考題 660
10.11 類對像和結構的指針 662
10.11.1 類對像的動態分配 663
10.11.2 使用指向類對像的指針作為函數形參 665
10.12 關於軟件工程:選擇對像成員 667
思考題 668
10.13 智能指針 669
10.13.1 unique_ptr類 669
10.13.2 指向數組的獨占指針 672
10.13.3 unique_ptr類的成員函數 673
10.13.4 shared_ptr類 675
10.13.5 共享指針組 676
10.13.6 雙重管理的危險 677
10.13.7 make_shared<T>()函數 677
10.13.8 shared_ptr成員函數 677
10.13.9 指向數組的共享指針 678
10.14 綜合演練:對不起,考試時間已到 678
10.14.1 復習和練習 681
10.14.2 編程挑戰 685
1章 類和面向對像編程詳解 688
11.1 this指針和常量成員函數 688
11.1.1 this指針 688
11.1.2 常量成員函數 692
11.2 靜態成員 693
11.2.1 靜態成員變量 694
11.2.2 靜態成員函數 697
11.3 700
思考題 705
11.4 按成員賦值 705
11.5 復制構造函數 707
11.5.1 默認復制構造函數 708
11.5.2 默認復制構造函數的缺陷 709
11.5.3 程序員定義的復制構造函數 712
11.5.4 復制構造函數的調用 715
11.5.5 思考題 716
11.6 運算符重載 716
11.6.1 重載賦值運算符 716
11.6.2 類賦值運算符的返回值 718
11.6.3 類賦值運算符的實現 718
11.6.4 重載其他運算符 722
11.6.5 運算符重載的一些基本問題 723
11.6.6 運算符重載的方法 724
11.6.7 重載算術和關繫運算符 724
11.6.8 在獨立函數和成員函數運算符之間作出選擇 727
11.6.9 重載前綴++運算符 729
11.6.10 重載後綴++運算符 729
11.6.11 重載流插入和提取運算符 730
11.6.12 重載[ ]運算符 734
11.6.13 思考題 738
11.7 右值引用和移動操作 738
11.7.1 左值和右值 739
11.7.2 移動構造函數和移動賦值運算符 740
11.7.3 編譯器使用移動操作的時機 748
11.7.4 默認操作 748
11.8 函數對像和Lambda表達式 749
11.8.1 謂詞函數 750
11.8.2 使用函數對像作為函數的形參 751
11.8.3 排序數組和矢量 751
11.8.4 從矢量素 752
11.8.5 可存儲值的函數對像 754
11.8.6 返回void的函數對像 755
11.8.7 在C++庫中的函數類 756
11.8.8 Lambda表達式 758
11.8.9 思考題 759
11.9 類型轉換運算符 759
11.10 轉換構造函數 762
思考題 765
11.11 聚合和組合 766
11.11.1 成員初始化列表 766
11.11.2 通過指針聚合 768
11.11.3 聚合、組合和對像生命周期 769
11.11.4 Has-a關繫 771
11.12 繼承 772
11.12.1 普遍性和特殊性 772
11.12.2 繼承與Is-a關繫 772
11.12.3 繼承和指針 774
11.12.4 超類和子類 777
11.12.5 多繼承 777
11.13 受保護的成員和類訪問 777
11.13.1 基類訪問規範 780
11.13.2 思考題 781
11.14 構造函數、析構函數和繼承 782
11.14.1 將實參傳遞給基類構造函數 784
11.14.2 思考題 786
11.15 覆蓋基類函數 788
11.15.1 在基類函數和派生類覆蓋版本之間做出選擇 790
11.15.2 重載和覆蓋的區別 790
11.15.3 獲取被覆蓋成員函數的訪問權限 790
11.16 綜合演練:將數據發布到互聯網 791
11.16.1 復習和練習 795
11.16.2 編程挑戰 800
2章 C字符串和string類詳解 804
12.1 C字符串 804
12.1.1 字符串常數 805
12.1.2 程序員定義的字符數組 806
12.1.3 指向char的指針 807
12.2 處理C字符串的庫函數 809
12.2.1 strlen函數 809
12.2.2 傳遞C字符串實參 809
12.2.3 strcat函數 809
12.2.4 strcpy函數 810
12.2.5 比較C字符串 811
12.2.6 strcmp函數 812
12.2.7 結合使用?! 運算符與strcmp 815
12.2.8 排序字符串 815
12.2.9 思考題 816
12.3 數字和字符串之間的轉換 818
12.3.1 使用字符串流對像進行數字轉換 818
12.3.2 數字轉換函數 820
12.3.3 思考題 822
12.4 編寫自己的C字符串處理函數 822
12.4.1 使用指針傳遞C字符串實參 826
12.4.2 思考題 827
12.5 C++ string類詳解 828
12.6 Advanced Software Enterprises案例研究 830
12.7 綜合演練:程序執行環境 831
12.7.1 復習和練習 833
12.7.2 編程挑戰 836
3章 不錯文件和I/O操作 841
13.1 輸入和輸出流 841
13.1.1 文件流類 841
13.1.2 文件打開模式 844
13.1.3 使用構造函數打開文件 844
13.1.4 輸出格式化和I/O操作符 844
13.1.5 思考題 848
13.2 詳細的錯誤測試 849
13.3 讀取和寫入文件的成員函數 852
13.3.1 getline函數 853
13.3.2 get繫列成員函數 857
13.3.3 peek成員函數 858
13.3.4 put成員函數 860
13.3.5 倒回文件的開始位置 861
13.3.6 思考題 863
13.4 二進制文件 865
13.5 使用結構創建記錄 869
思考題 873
13.6 隨機訪問文件 873
13.6.1 seekp和seekg成員函數 874
13.6.2 tellp和tellg成員函數 878
13.7 打開文件進行輸入和輸出 880
思考題 885
13.8 Online Friendship Connections
案例研究:對像序列化 885
13.8.1 對像序列化 886
13.8.2 設計程序需要的類 886
13.8.3 確定序列化方案 887
13.9 綜合演練:合並文件和設置HTML顏色 891
13.9.1 復習和練習 895
13.9.2 編程挑戰 898
4章 遞歸 902
14.1 遞歸介紹 902
14.1.1 直接遞歸和間接遞歸 907
14.1.2 思考題 907
14.2 遞歸計算階乘函數 908
14.3 遞歸計算優選公約數函數 910
14.4 解決遞歸式定義的問題 911
14.5 遞歸二分搜索函數 913
14.6 關於問題解決和程序設計:快速排序算法 915
14.7 漢諾塔 919
14.8 關於問題解決:窮舉和枚舉算法 923
14.9 關於軟件工程:遞歸與迭代 926
14.10 綜合演練:中綴和前綴表達式 926
14.10.1 復習和練習 930
14.10.2 編程挑戰 932
5章 多態和虛函數 935
15.1 繼承層次結構中的類型兼容性 935
15.1.1 繼承的層次結構 935
15.1.2 繼承的類型兼容性 935
15.1.3 基類指針的類型強制轉換 939
15.2 多態和虛成員函數 941
15.2.1 動態和靜態綁定 946
15.2.2 C++ 11的override和final關鍵字 947
15.2.3 防止成員函數被覆蓋 949
15.3 抽像基類和純虛函數 949
思考題 952
15.4 關於面向對像編程:組合與繼承的對比 956
15.5 Secure Encryption System公司案例研究 960
15.5.1 理解問題 960
15.5.2 一個簡單的加密/解密框架 961
15.6 綜合演練:移動圖形 964
15.6.1 復習和練習 971
15.6.2 編程挑戰 973
6章 異常、模板和標準模板庫 975
16.1 異常 975
16.1.1 拋出異常 976
16.1.2 處理異常 976
16.1.3 異常未被捕獲的情形 978
16.1.4 面向對像的異常處理類 978
16.1.5 多個異常 980
16.1.6 從異常類中提取信息 982
16.1.7 處理由new引發的bad_alloc異常 985
16.1.8 棧展開 986
16.1.9 重新拋出異常 986
16.1.10 思考題 987
16.2 函數模板 987
16.2.1 swap函數模板 990
16.2.2 在函數模板中使用運算符 992
16.2.3 使用多種類型的函數模板 993
16.2.4 函數模板重載 994
16.2.5 定義模板函數 995
16.2.6 思考題 995
16.3 類模板 995
16.4 類模板和繼承 1001
思考題 1004
16.5 標準模板庫簡介 1005
16.5.1 順序容器 1005
16.5.2 關聯容器 1005
16.5.3 迭代器 1006
16.5.4 迭代器的使用 1006
16.5.5 vector容器 1009
16.5.6 算法 1010
16.6 綜合演練:單詞變形遊戲 1018
16.6.1 復習和練習 1021
16.6.2 編程挑戰 1022
7章 鏈表 1026
17.1 鏈表ADT簡介 1026
17.1.1 鏈表對數組和矢量的優點 1026
17.1.2 鏈表的結構 1026
17.1.3 鏈表的C++表示 1027
17.1.4 使用構造函數初始化結點 1029
17.1.5 建立一個鏈表 1030
17.1.6 遍歷鏈表 1030
17.1.7 思考題 1032
17.2 鏈表操作 1032
17.2.1 添素到鏈表中 1034
17.2.2 顯示鏈表 1035
17.2.3 銷毀鏈表 1035
17.2.4 按排序順序建立鏈表 1037
17.2.5 將結點插入排序鏈表 1037
17.2.6 思考題 1040
17.2.7 從鏈表素 1040
17.2.8 思考題 1043
17.3 鏈表模板* 1044
17.4 遞歸鏈表操作 1048
17.4.1 遞歸鏈表函數 1048
17.4.2 遞歸成員函數 1051
17.4.3 遞歸add成員函數 1052
17.4.4 遞歸remove成員函數 1054
17.5 鏈表的變體 1057
17.6 STL list容器* 1058
17.7 Reliable Software Systems公司案例研究 1060
17.7.1 問題陳述 1060
17.7.2 修改和類設計規劃 1061
17.7.3 類成員函數的實現 1061
17.8 綜合演練:跑步穿過屏幕動畫 1064
17.8.1 使用圖像映射表示形狀 1064
17.8.2 動畫基礎 1066
17.8.3 實施細節 1066
17.8.4 復習和練習 1070
17.8.5 編程挑戰 1073
8章 棧和隊列 1076
18.1 棧ADT簡介 1076
18.1.1 定義 1076
18.1.2 棧的應用 1076
18.1.3 靜態棧和動態棧 1077
18.1.4 棧操作 1077
18.1.5 靜態棧類 1077
18.1.6 處理棧異常 1082
18.1.7 棧模板 1083
18.2 動態棧 1083
18.3 標準模板庫stack容器* 1087
思考題 1089
18.4 隊列ADT簡介 1089
18.4.1 定義 1089
18.4.2 隊列的應用 1089
18.4.3 靜態隊列和動態隊列 1090
18.4.4 隊列操作 1090
18.4.5 使用循環數組檢測滿隊列和空隊列 1092
18.4.6 靜態隊列類 1092
18.4.7 靜態隊列中的溢出和下溢異常 1096
18.5 動態隊列 1096
18.6 標準模板庫deque和queue容器* 1100
18.6.1 deque容器 1100
18.6.2 queue容器適配器 1102
18.7 關於問題解決和程序設計:消除遞歸 1103
18.8 綜合演練:將後綴表達式轉換為中綴表達式 1107
18.8.1 復習和練習 1110
18.8.2 編程挑戰 1112
9章 二叉樹 1116
19.1 二叉樹的定義和應用 1116
19.1.1 二叉樹的實現 1116
19.1.2 二叉樹的應用 1118
19.1.3 思考題 1119
19.2 二叉搜索樹操作 1119
19.2.1 創建二叉搜索樹 1119
19.2.2 二叉搜索樹操作的實現 1122
19.2.3 插素 1123
19.2.4 遍歷樹 1124
19.2.5 搜索二叉搜索樹 1126
19.2.6素 1128
19.2.7 思考題 1136
19.3 二叉搜索樹模板注意事項 1136
19.4 綜合演練:譜繫樹 1137
19.4.1 復習和練習 1142
19.4.2 編程挑戰 1143
附錄A ASCII 字符集 1146
附錄B 運算符優先級和關聯性 1150
附錄C 思考題答案 1151
附錄D 復習和練習奇數題的答案 1193
內容簡介
本書自版出版以來,就深受廣大讀者歡迎,成為學習C++的經典教材,這是很新的第9版。本書共分19章,從計算機科學的基礎知識和內容開始,介紹C++程序的基本組成部分,C++語言的語法和結構,類與面向對像編程,文件與I/O操作,遞歸的應用,多態與虛函數,異常處理,模板實現與標準模板庫使用,鏈表的概念與操作,棧與隊列的概念與操作,二叉樹及其操作等。本書的知識體繫完整,編寫體例充分考慮了教學的需要,全書給出了思考題447道,復習與練習題586道,挑戰編程題304道,完整程序362個,很好適合作為高等院校計算機及相關專業程序設計與數據結構的教材,也是精通C++程序設計的優選用書。