C++程式設計(第8版)

C++程式設計(第8版)

《C++程式設計(第8版)》是2012年清華大學出版社出版的圖書,作者是(美)薩維奇。

基本介紹

  • 書名:C++程式設計(第8版)
  • 作者:Walter Savitch 
  • 出版社:清華大學出版社 
  • 出版時間:2012年02月01日 
  • 定價:119 元 
  • 裝幀:平裝
  • ISBN:9787302278993 
  • 印次:8-2
  • 印刷日期:2014-1-8
圖書簡介,目錄,

圖書簡介

全書共18章,8個附錄。在屑淋跨講解C++基礎知識之後,直接引導學生深入函式、I/O流、類、控制流程、命名空間、數組、字元串、指針和動態數組、遞歸、模板、指針和鍊表、派生類、異常以及標準模板庫。

目錄

第1章計算機和C++編程入門 1
1.1計算機系統 2
1.1.1硬體 2
1.1.2軟體 5
1.1.3高級語言 6
1.1.4編譯器 7
1.1.5歷史回顧 8
1.2編程和問題求解 9
1.2.1算法 9
1.2.2程式設計 10
1.2.3面向對象編程 12
1.3C++入門 13
1.3.1C++語言的起源 13
1.3.2一個C++示範程式 14
1.3.3陷阱:在\n中錯誤地使用斜槓 17
1.3.4編程提示:輸入和輸出語法 17
1.3.5簡單C++程式的布局 17
1.3.6陷阱:在include的檔案名稱前錯誤地添加一個空格 18
1.3.7編譯和運行C++程式 19
1.3.8編程提示:讓程式運行起來 19
1.4測試和調試 21
1.4.1程式錯誤的分類 22
1.4.2陷阱:錯誤地假定程式正確 22
小結 23
自測題答案 23
編程項目 25
第己立記葛2章C++基礎知識 27
2.1變數和賦值 28
2.1.1變數 28
2.1.2名稱:標識符 30
2.1.3變數聲明 31
2.1.4賦值語句 32
2.1.5陷阱:未初始化的變數 33
2.1.6編程提示:使用有意義的名稱 34
2.2輸入和輸出 35
2.2.1使用cout進行輸出 35
2.2.2include預編譯指令和命名空間 36
2.2.3轉義序慨蜜埋列 37
2.2.4編程提示:用\n或endl終止每一個程式 38
2.2.5格式化帶小數點的數字 39
2.2.6用cin進行輸入 40
2.2.7設計輸入和輸出 41
2.2.8編程姜重提示:I/O中的換行 41
2.3數據類型和表達式 42
2.3.1int類型和double類型 42
2.3.2其他數值類型 43
2.3.3char類型 44
2.3.4bool類型 45
2.3.5string類簡介 45
2.3.6類型的兼容性 47
2.3.7算術操作符和表達式戰套鴉 48
2.3.8陷阱:除法中的整數 50
2.3.9更多賦值語句 51
2.4簡單控制流程 51
2.4.1一個簡單的分支機組試習制 52
2.4.2陷阱:連續的不等式 56
2.4.3陷阱:在該用==的時候錯用了= 56
2.4.4複合語句 57
2.4.5簡單的循環機制 58
2.4.6遞增操作符和遞減操作符 61
2.4.7編程實例:信用卡餘額 61
2.4.8陷阱:無限循環 63
2.5程式風格 64
2.5.1縮進 64
2.5.2注釋 65
2.5.3為常量命名 66
小結 67
自測題答案 68
編程項目 71
第3章更多的控制流程 77
3.1使用布爾表達式 78
3.1.1布爾表達式求值 78
3.1.2陷阱:將布爾表達式轉換成int值 81
3.1.3枚舉類型(選讀) 83
3.2多路分支 83
3.2.1嵌套語句 83
3.2.2編程提示:在嵌套語句中使用花括弧 84
3.2.3多路if-else語句 86
3.2.4編程實例:州收入稅 87
3.2.5switch語句 89
3.2.6陷阱:忘記在switch語句中添加break 92
3.2.7為選單使用switch語句 92
3.2.8語句塊 94
3.2.9陷阱:疏忽局部變數 95
3.3C++循環語句詳解 97
3.3.1while語句回顧 97
3.3.2再論遞增操作符和遞減操作符 98
3.3.3for語句 100
3.3.4陷阱:for語句中多餘的分號 103
3.3.5應該使用哪種循環 104
3.3.6陷阱:未初始化的變數和無限循環 105
3.3.7break語句 106
3.3.8陷阱:嵌套循環中的break語句 106
3.4設計循環 107
3.4.1求和與求乘積的循環 107
3.4.2終止循環 108
3.4.3嵌套循環 111
3.4.4調試循環 112
小結 114
自測題答案 115
編程項目 118
第4章過程抽象和返回值的函式 123
4.1自頂向下設計 124
4.2預定義函式 124
4.2.1使用預定義函式 124
4.2.2隨機數生成 128
4.2.4強制類型轉換的古老形式 131
4.2.5陷阱:整數除法丟棄了小數部分 131
4.3程式設計師自定義堡燥白腿函式 132
4.3.1函式定義 132
4.3.2能返回布爾值的函式 136
4.3.3另一種形式的函式聲明 136
4.3.4陷阱:實參順序錯誤 137
4.3.5函式定義語法總結 138
4.3.6再論函式定義的位置 139
4.3.7編程提示:在分支語句中使用函式調用 139
4.4過程抽象 140
4.4.1黑盒的比喻 140
4.4.2編程提示:選擇形參名稱 142
4.4.3編程提示:嵌套循環 142
4.4.4案例分析:購買比薩 144
4.4.5編程提示:使用偽代碼 149
4.5局部變數 149
4.5.1函式如同小程式 149
4.5.2編程實例:豌豆試驗田 151
4.5.3全局常量和全局變數 151
4.5.4傳值形參是局部變數 153
4.5.5塊作用域 155
4.5.6再論命名空間 156
4.5.7編程實例:階乘函式 158
4.6重載函式名稱 158
4.6.1重載入門 159
4.6.2編程實例;購買比薩(修訂版) 161
小結 164
自測題答案 165
編程項目 167
第5章所有子任務的函式 171
5.1void函式 172
5.1.1void函式的定義 172
5.1.2編程實例:溫度換算 174
5.1.3void函式中的return語句 175
5.2傳引用形參 176
5.2.1初探傳引用調用 177
5.2.2傳引用調用詳解 178
5.2.3編程實例:swap_values函式 181
5.2.4混合的參數列表 183
5.2.5編程提示:應該使用哪種參數 183
5.2.6陷阱:疏忽造成的局部變數 184
5.3使用過程抽象 186
5.3.1函式調用函式 186
5.3.2前條件和後條件 188
5.3.3案例分析:超市定價系統 188
5.4測試和調試函式 192存根和驅動程式 192
5.5常規調試技術 196
5.5.1不抱成見 196
5.5.2檢查常見錯誤 196
5.5.3定位錯誤 196
5.5.4assert宏 198
小結 199
自測題答案 200
編程項目 202
第6章I/O流——對象和類入門 207
6.1流和基本檔案I/O 208
6.1.1檔案之於I/O的重要性 209
6.1.2檔案I/O 209
6.1.3類與對象入門 212
6.1.4編程提示:檢查檔案是否成功打開 214
6.1.5檔案I/O技術 216
6.1.6追加到檔案(選讀) 218
6.1.7檔案名稱作為輸入(選讀) 219
6.2流I/O工具 221
6.2.1用流函式格式化輸出 222
6.2.2操縱元 224
6.2.3流作為函式實參 226
6.2.4編程提示:檢查檔案尾 228
6.2.5命名空間的問題 229
6.2.6編程實例:整理檔案格式 229
6.3字元I/O 230
6.3.1get和put成員函式 231
6.3.2putback成員函式(選讀) 233
6.3.3編程實例:檢查輸入 234
6.3.4陷阱:輸入中不期而遇的'\n' 235
6.3.5編程實例:另一個new_line函式 236
6.3.6函式的默認實參(選讀) 237
6.3.7eof成員函式 240
6.3.8編程實例:編輯文本檔案 242
6.3.9預定義字元函式 243
6.3.10陷阱:toupper和tolower返回值 245
小結 245
自測題答案 246
編程項目 250
第7章數組 257
7.1數組入門 258
7.1.1聲明和引用數組 258
7.1.2編程提示:為數組使用for循環 260
7.1.3陷阱:數組索引總是從零開始 260
7.1.4編程提示:為數組長度使用一個已定義常量 260
7.1.5數組在記憶體中的表示 261
7.1.6陷阱:數組索引越界 262
7.1.7初始化數組 263
7.2函式中的數組 264
7.2.1索引變數作為函式參數 264
7.2.2整個數組作為函式參數 266
7.2.3const參數修飾符 268
7.2.4陷阱:使用const參數修飾符的使用不一致 269
7.2.5返回數組的函式 270
7.2.6案例分析:產量圖 270
7.3數組編程 280
7.3.1部分填充數組 280
7.3.2編程提示:不要吝嗇形參 282
7.3.3編程實例:搜尋數組 282
7.3.4編程實例:數組排序 284
7.4多維數組 287
7.4.1多維數組基礎 287
7.4.2多維數組參數 288
7.4.3編程實例:二維打分程式 289
7.4.4陷阱:在數組索引之間使用逗號 292
小結 292
自測題答案 293
編程項目 296
第8章字元串和向量 303
8.1字元串的數組類型 304
8.1.1C字元串值和C字元串變數 305
8.1.2陷阱:為C字元串使用=和== 307
8.1.3<cstring>中的其他函式 309
8.1.4C字元串輸入和輸出 312
8.1.5C字元串到數值的轉換和可靠輸入 314
8.2標準string類 317
8.2.1標準類string簡介 317
8.2.2string類的I/O 319
8.2.3編程提示:getline的其他版本 322
8.2.4陷阱:混合使用“cin>>變數;”和getline 322
8.2.5用string類進行字元串處理 323
8.2.6編程實例:回文測試 326
8.2.7string對象和C字元串之間的轉換 328
8.3向量 329
8.3.1向量基礎知識 329
8.3.2陷阱:使用方括弧時超出向量長度 332
8.3.3編程提示:向量賦值具有良好行為 332
8.3.4效率問題 332
小結 333
自測題答案 334
編程項目 335
第9章指針和動態數組 341
9.1指針 342
9.1.1指針變數 343
9.1.2基本記憶體管理 348
9.1.3陷阱:虛懸指針 348
9.1.4靜態變數和自動變數 348
9.1.5編程提示:定義指針類型 349
9.2動態數組 350
9.2.1數組變數和指針變數 351
9.2.2創建和使用動態數組 352
9.2.3指針運算(選讀) 356
9.2.4多維動態數組(選讀) 357
小結 358
自測題答案 359
編程項目 359
第10章定義類 363
10.1結構 364
10.1.1用於異種數據的結構 364
10.1.2陷阱:結構定義中忘記添加分號 367
10.1.3結構作為函式參數 368
10.1.4編程提示:使用層次化結構 368
10.1.5對結構進行初始化 370
10.2類 372
10.2.1定義類和成員函式 372
10.2.2公共成員和私有成員 375
10.2.3編程提示:將所有成員變數設為私有 381
10.2.4編程提示:定義取值函式和賦值函式 381
10.2.5編程提示:將賦值操作符用於對象 382
10.2.6編程實例:BankAccount類(版本1) 382
10.2.7總結類的一些特徵 386
10.2.8用於初始化的構造函式 387
10.2.9編程提示:總是包括默認構造函式 392
10.2.10陷阱:無參數構造函式 393
10.3.1用於生成抽象數據類型的類 395
10.3.2編程實例:類的另一種實現 398
10.4繼承 401
10.4.1派生類 401
10.4.2定義派生類 402
小結 405
自測題答案 405
編程項目 409
第11章類中的友元函式、重載操作符和數組 413
11.1友元函式 414
11.1.1編程實例:一個相等性函式 414
11.1.2友元函式 416
11.1.3編程提示:定義取值函式和友元函式 418
11.1.4編程提示:同時使用成員函式和非成員函式 418
11.1.5編程實例:Money類(版本1) 419
11.1.6實現digit_to_int(選讀) 423
11.1.7陷阱:數字常量中的前置零 424
11.1.8const參數修飾符 425
11.1.9陷阱:修飾符const的用法不一致 427
11.2重載操作符 429
11.2.1重載操作符 429
11.2.2用於自動類型轉換的構造函式 432
11.2.3重載一元操作符 433
11.2.4重載>>和<< 434
11.3數組和類 440
11.3.1類數組 440
11.3.2數組作為類成員 443
11.3.3編程實例:用於部分填充數組的類 444
11.4類和動態數組 445
11.4.1編程實例:字元串變數類 446
11.4.2析構函式 448
11.4.3陷阱:指針作為傳值參數 450
11.4.5重載賦值操作符 454
小結 457
自測題答案 457
編程項目 463
第12章獨立編譯和命名空間 469
12.1獨立編譯 470
12.1.1ADT回顧 470
12.1.2案例分析:獨立編譯的
DigitalTime類 471
12.1.3使用#ifndef 478
12.1.4編程提示:定義其他庫 480
12.2命名空間 481
12.2.1命名空間和using預編譯指令 481
12.2.2創建命名空間 482
12.2.3限定名稱 484
12.2.4命名空間的微妙之處(選讀) 485
12.2.5無名命名空間 486
12.2.6編程提示:為命名空間選擇名稱 489
12.2.7陷阱:混淆全局命名空間和無名命名空間 490
小結 491
自測題答案 491
編程項目 492
第13章指針和鍊表 495
13.1節點和鍊表 496
13.1.1節點 497
13.1.2鍊表 500
13.1.3在表頭插入節點 501
13.1.4陷阱:丟失節點 503
13.1.5搜尋鍊表 504
13.1.6指針作為疊代器 506
13.1.7在列表中插入和刪除節點 507
13.1.8陷阱:為動態數據結構使用賦值操作符 509
13.1.9鍊表的變體 510
13.1.10類構成的鍊表 512
13.2棧和佇列 514
13.2.1棧 514
13.2.2編程實例:棧類 515
13.2.3佇列 518
13.2.4編程實例:佇列類 518
小結 521
自測題答案 522
編程項目 523
第14章遞歸 529
14.1面向任務的遞歸函式 530
14.1.1案例分析:垂直數字 531
14.1.2深入遞歸 536
14.1.3陷阱:無窮遞歸 537
14.1.4用於遞歸的棧 538
14.1.5陷阱:棧溢出 539
14.1.6遞歸與疊代 539
14.2面向值的遞歸函式 540
14.2.1要返回值的遞歸函式的常規形式 540
14.2.2編程實例:另一個求乘方函式 540
14.3遞歸思想 544
14.3.1遞歸設計技術 544
14.3.2案例分析:二叉搜尋(遞歸思想示例) 545
14.3.3編程實例:遞歸成員函式 550
小結 553
自測題答案 553
編程項目 556
第15章繼承 559
15.1繼承基礎 560
15.1.1派生類 560
15.1.2派生類中的構造函式 566
15.1.3陷阱:使用來自基類的私有成員變數 567
15.1.4陷阱:私有成員函式不會繼承 569
15.1.5protected限定符 569
15.1.6重定義成員函式 571
15.1.7重定義與重載的比較 573
15.1.8訪問重定義的基函式 574
15.2繼承細節 575
15.2.1不繼承的函式 575
15.2.2派生類中的賦值操作符和拷貝構造函式 575
15.2.3派生類中的析構函式 576
15.3多態性 577
15.3.1晚期綁定 577
15.3.2C++虛函式 578
15.3.3虛函式和擴展類型兼容性 582
15.3.4陷阱:切割問題 584
15.3.5陷阱:不使用虛成員函式 585
15.3.6陷阱:試圖對虛成員函式定義不齊全的類進行編譯 585
15.3.7編程提示:使析構函式成為虛函式 586
小結 587
自測題答案 587
編程項目 590
第16章異常處理 597
16.1異常處理基礎 598
16.1.1異常處理的簡單例子 599
16.1.2定義自己的異常類 605
16.1.3多個throw塊和catch塊 606
16.1.4陷阱:首先捕捉較具體的異常 607
16.1.5編程提示:異常類可能很簡單 608
16.1.6在函式中拋出異常 609
16.1.7異常規範 610
16.1.8陷阱:派生類中的異常規範 611
16.2用於異常處理的編程技術 612
16.2.1拋出異常的時機 612
16.2.2陷阱:未捕捉的異常 613
16.2.3陷阱:嵌套try-catch塊 613
16.2.4陷阱:濫用異常 614
16.2.5異常類層次結構 614
16.2.6測試可用記憶體 614
16.2.7重新拋出異常 615
小結 615
自測題答案 615
編程項目 616
第17章模板 619
17.1用於算法抽象的模板 620
17.1.1函式模板 621
17.1.2陷阱:編譯器的複雜性 624
17.1.3編程實例:泛化排序函式 625
17.1.4編程提示:如何定義模板 628
17.1.5陷阱:為不恰當的類型使用模板 628
17.2用於數據抽象的模板 628
17.2.1類模板的語法 629
17.2.2編程實例:數組類 631
小結 634
自測題答案 634
編程項目 636
第18章標準模板庫 639
18.1疊代器 640
18.1.1using聲明 641
18.1.2疊代器的基礎知識 641
18.1.3陷阱:編譯器問題 645
18.1.4疊代器的種類 646
18.1.5常量和可變疊代器 648
18.1.6逆向疊代器 649
18.1.7其他種類的疊代器 650
18.2容器 651
18.2.1順序容器 651
18.2.2陷阱:疊代器和刪除元素 654
18.2.3編程提示:容器中的類型定義 654
18.2.4容器配接器stack和queue 655
18.2.5關聯容器set和map 657
18.2.6效率問題 662
18.3泛型算法 662
18.3.1運行時間和大O表示法 663
18.3.2容器訪問運行時間 666
18.3.3不修改容器的算法 666
18.3.4會修改容器的算法 670
18.3.5set算法 670
18.3.6排序算法 671
小結 672
自測題答案 672
編程項目 673
附錄1C++關鍵字 679
附錄2操作符的優先權 680
附錄3ASCII字元集 681
附錄4部分庫函式 682
附錄5內聯函式 686
附錄6重載數組索引方括弧 687
附錄7this指針 688
附錄8將操作符重載為成員操作符 690
2.4簡單控制流程 51
2.4.1一個簡單的分支機制 52
2.4.2陷阱:連續的不等式 56
2.4.3陷阱:在該用==的時候錯用了= 56
2.4.4複合語句 57
2.4.5簡單的循環機制 58
2.4.6遞增操作符和遞減操作符 61
2.4.7編程實例:信用卡餘額 61
2.4.8陷阱:無限循環 63
2.5程式風格 64
2.5.1縮進 64
2.5.2注釋 65
2.5.3為常量命名 66
小結 67
自測題答案 68
編程項目 71
第3章更多的控制流程 77
3.1使用布爾表達式 78
3.1.1布爾表達式求值 78
3.1.2陷阱:將布爾表達式轉換成int值 81
3.1.3枚舉類型(選讀) 83
3.2多路分支 83
3.2.1嵌套語句 83
3.2.2編程提示:在嵌套語句中使用花括弧 84
3.2.3多路if-else語句 86
3.2.4編程實例:州收入稅 87
3.2.5switch語句 89
3.2.6陷阱:忘記在switch語句中添加break 92
3.2.7為選單使用switch語句 92
3.2.8語句塊 94
3.2.9陷阱:疏忽局部變數 95
3.3C++循環語句詳解 97
3.3.1while語句回顧 97
3.3.2再論遞增操作符和遞減操作符 98
3.3.3for語句 100
3.3.4陷阱:for語句中多餘的分號 103
3.3.5應該使用哪種循環 104
3.3.6陷阱:未初始化的變數和無限循環 105
3.3.7break語句 106
3.3.8陷阱:嵌套循環中的break語句 106
3.4設計循環 107
3.4.1求和與求乘積的循環 107
3.4.2終止循環 108
3.4.3嵌套循環 111
3.4.4調試循環 112
小結 114
自測題答案 115
編程項目 118
第4章過程抽象和返回值的函式 123
4.1自頂向下設計 124
4.2預定義函式 124
4.2.1使用預定義函式 124
4.2.2隨機數生成 128
4.2.4強制類型轉換的古老形式 131
4.2.5陷阱:整數除法丟棄了小數部分 131
4.3程式設計師自定義函式 132
4.3.1函式定義 132
4.3.2能返回布爾值的函式 136
4.3.3另一種形式的函式聲明 136
4.3.4陷阱:實參順序錯誤 137
4.3.5函式定義語法總結 138
4.3.6再論函式定義的位置 139
4.3.7編程提示:在分支語句中使用函式調用 139
4.4過程抽象 140
4.4.1黑盒的比喻 140
4.4.2編程提示:選擇形參名稱 142
4.4.3編程提示:嵌套循環 142
4.4.4案例分析:購買比薩 144
4.4.5編程提示:使用偽代碼 149
4.5局部變數 149
4.5.1函式如同小程式 149
4.5.2編程實例:豌豆試驗田 151
4.5.3全局常量和全局變數 151
4.5.4傳值形參是局部變數 153
4.5.5塊作用域 155
4.5.6再論命名空間 156
4.5.7編程實例:階乘函式 158
4.6重載函式名稱 158
4.6.1重載入門 159
4.6.2編程實例;購買比薩(修訂版) 161
小結 164
自測題答案 165
編程項目 167
第5章所有子任務的函式 171
5.1void函式 172
5.1.1void函式的定義 172
5.1.2編程實例:溫度換算 174
5.1.3void函式中的return語句 175
5.2傳引用形參 176
5.2.1初探傳引用調用 177
5.2.2傳引用調用詳解 178
5.2.3編程實例:swap_values函式 181
5.2.4混合的參數列表 183
5.2.5編程提示:應該使用哪種參數 183
5.2.6陷阱:疏忽造成的局部變數 184
5.3使用過程抽象 186
5.3.1函式調用函式 186
5.3.2前條件和後條件 188
5.3.3案例分析:超市定價系統 188
5.4測試和調試函式 192存根和驅動程式 192
5.5常規調試技術 196
5.5.1不抱成見 196
5.5.2檢查常見錯誤 196
5.5.3定位錯誤 196
5.5.4assert宏 198
小結 199
自測題答案 200
編程項目 202
第6章I/O流——對象和類入門 207
6.1流和基本檔案I/O 208
6.1.1檔案之於I/O的重要性 209
6.1.2檔案I/O 209
6.1.3類與對象入門 212
6.1.4編程提示:檢查檔案是否成功打開 214
6.1.5檔案I/O技術 216
6.1.6追加到檔案(選讀) 218
6.1.7檔案名稱作為輸入(選讀) 219
6.2流I/O工具 221
6.2.1用流函式格式化輸出 222
6.2.2操縱元 224
6.2.3流作為函式實參 226
6.2.4編程提示:檢查檔案尾 228
6.2.5命名空間的問題 229
6.2.6編程實例:整理檔案格式 229
6.3字元I/O 230
6.3.1get和put成員函式 231
6.3.2putback成員函式(選讀) 233
6.3.3編程實例:檢查輸入 234
6.3.4陷阱:輸入中不期而遇的'\n' 235
6.3.5編程實例:另一個new_line函式 236
6.3.6函式的默認實參(選讀) 237
6.3.7eof成員函式 240
6.3.8編程實例:編輯文本檔案 242
6.3.9預定義字元函式 243
6.3.10陷阱:toupper和tolower返回值 245
小結 245
自測題答案 246
編程項目 250
第7章數組 257
7.1數組入門 258
7.1.1聲明和引用數組 258
7.1.2編程提示:為數組使用for循環 260
7.1.3陷阱:數組索引總是從零開始 260
7.1.4編程提示:為數組長度使用一個已定義常量 260
7.1.5數組在記憶體中的表示 261
7.1.6陷阱:數組索引越界 262
7.1.7初始化數組 263
7.2函式中的數組 264
7.2.1索引變數作為函式參數 264
7.2.2整個數組作為函式參數 266
7.2.3const參數修飾符 268
7.2.4陷阱:使用const參數修飾符的使用不一致 269
7.2.5返回數組的函式 270
7.2.6案例分析:產量圖 270
7.3數組編程 280
7.3.1部分填充數組 280
7.3.2編程提示:不要吝嗇形參 282
7.3.3編程實例:搜尋數組 282
7.3.4編程實例:數組排序 284
7.4多維數組 287
7.4.1多維數組基礎 287
7.4.2多維數組參數 288
7.4.3編程實例:二維打分程式 289
7.4.4陷阱:在數組索引之間使用逗號 292
小結 292
自測題答案 293
編程項目 296
第8章字元串和向量 303
8.1字元串的數組類型 304
8.1.1C字元串值和C字元串變數 305
8.1.2陷阱:為C字元串使用=和== 307
8.1.3<cstring>中的其他函式 309
8.1.4C字元串輸入和輸出 312
8.1.5C字元串到數值的轉換和可靠輸入 314
8.2標準string類 317
8.2.1標準類string簡介 317
8.2.2string類的I/O 319
8.2.3編程提示:getline的其他版本 322
8.2.4陷阱:混合使用“cin>>變數;”和getline 322
8.2.5用string類進行字元串處理 323
8.2.6編程實例:回文測試 326
8.2.7string對象和C字元串之間的轉換 328
8.3向量 329
8.3.1向量基礎知識 329
8.3.2陷阱:使用方括弧時超出向量長度 332
8.3.3編程提示:向量賦值具有良好行為 332
8.3.4效率問題 332
小結 333
自測題答案 334
編程項目 335
第9章指針和動態數組 341
9.1指針 342
9.1.1指針變數 343
9.1.2基本記憶體管理 348
9.1.3陷阱:虛懸指針 348
9.1.4靜態變數和自動變數 348
9.1.5編程提示:定義指針類型 349
9.2動態數組 350
9.2.1數組變數和指針變數 351
9.2.2創建和使用動態數組 352
9.2.3指針運算(選讀) 356
9.2.4多維動態數組(選讀) 357
小結 358
自測題答案 359
編程項目 359
第10章定義類 363
10.1結構 364
10.1.1用於異種數據的結構 364
10.1.2陷阱:結構定義中忘記添加分號 367
10.1.3結構作為函式參數 368
10.1.4編程提示:使用層次化結構 368
10.1.5對結構進行初始化 370
10.2類 372
10.2.1定義類和成員函式 372
10.2.2公共成員和私有成員 375
10.2.3編程提示:將所有成員變數設為私有 381
10.2.4編程提示:定義取值函式和賦值函式 381
10.2.5編程提示:將賦值操作符用於對象 382
10.2.6編程實例:BankAccount類(版本1) 382
10.2.7總結類的一些特徵 386
10.2.8用於初始化的構造函式 387
10.2.9編程提示:總是包括默認構造函式 392
10.2.10陷阱:無參數構造函式 393
10.3.1用於生成抽象數據類型的類 395
10.3.2編程實例:類的另一種實現 398
10.4繼承 401
10.4.1派生類 401
10.4.2定義派生類 402
小結 405
自測題答案 405
編程項目 409
第11章類中的友元函式、重載操作符和數組 413
11.1友元函式 414
11.1.1編程實例:一個相等性函式 414
11.1.2友元函式 416
11.1.3編程提示:定義取值函式和友元函式 418
11.1.4編程提示:同時使用成員函式和非成員函式 418
11.1.5編程實例:Money類(版本1) 419
11.1.6實現digit_to_int(選讀) 423
11.1.7陷阱:數字常量中的前置零 424
11.1.8const參數修飾符 425
11.1.9陷阱:修飾符const的用法不一致 427
11.2重載操作符 429
11.2.1重載操作符 429
11.2.2用於自動類型轉換的構造函式 432
11.2.3重載一元操作符 433
11.2.4重載>>和<< 434
11.3數組和類 440
11.3.1類數組 440
11.3.2數組作為類成員 443
11.3.3編程實例:用於部分填充數組的類 444
11.4類和動態數組 445
11.4.1編程實例:字元串變數類 446
11.4.2析構函式 448
11.4.3陷阱:指針作為傳值參數 450
11.4.5重載賦值操作符 454
小結 457
自測題答案 457
編程項目 463
第12章獨立編譯和命名空間 469
12.1獨立編譯 470
12.1.1ADT回顧 470
12.1.2案例分析:獨立編譯的
DigitalTime類 471
12.1.3使用#ifndef 478
12.1.4編程提示:定義其他庫 480
12.2命名空間 481
12.2.1命名空間和using預編譯指令 481
12.2.2創建命名空間 482
12.2.3限定名稱 484
12.2.4命名空間的微妙之處(選讀) 485
12.2.5無名命名空間 486
12.2.6編程提示:為命名空間選擇名稱 489
12.2.7陷阱:混淆全局命名空間和無名命名空間 490
小結 491
自測題答案 491
編程項目 492
第13章指針和鍊表 495
13.1節點和鍊表 496
13.1.1節點 497
13.1.2鍊表 500
13.1.3在表頭插入節點 501
13.1.4陷阱:丟失節點 503
13.1.5搜尋鍊表 504
13.1.6指針作為疊代器 506
13.1.7在列表中插入和刪除節點 507
13.1.8陷阱:為動態數據結構使用賦值操作符 509
13.1.9鍊表的變體 510
13.1.10類構成的鍊表 512
13.2棧和佇列 514
13.2.1棧 514
13.2.2編程實例:棧類 515
13.2.3佇列 518
13.2.4編程實例:佇列類 518
小結 521
自測題答案 522
編程項目 523
第14章遞歸 529
14.1面向任務的遞歸函式 530
14.1.1案例分析:垂直數字 531
14.1.2深入遞歸 536
14.1.3陷阱:無窮遞歸 537
14.1.4用於遞歸的棧 538
14.1.5陷阱:棧溢出 539
14.1.6遞歸與疊代 539
14.2面向值的遞歸函式 540
14.2.1要返回值的遞歸函式的常規形式 540
14.2.2編程實例:另一個求乘方函式 540
14.3遞歸思想 544
14.3.1遞歸設計技術 544
14.3.2案例分析:二叉搜尋(遞歸思想示例) 545
14.3.3編程實例:遞歸成員函式 550
小結 553
自測題答案 553
編程項目 556
第15章繼承 559
15.1繼承基礎 560
15.1.1派生類 560
15.1.2派生類中的構造函式 566
15.1.3陷阱:使用來自基類的私有成員變數 567
15.1.4陷阱:私有成員函式不會繼承 569
15.1.5protected限定符 569
15.1.6重定義成員函式 571
15.1.7重定義與重載的比較 573
15.1.8訪問重定義的基函式 574
15.2繼承細節 575
15.2.1不繼承的函式 575
15.2.2派生類中的賦值操作符和拷貝構造函式 575
15.2.3派生類中的析構函式 576
15.3多態性 577
15.3.1晚期綁定 577
15.3.2C++虛函式 578
15.3.3虛函式和擴展類型兼容性 582
15.3.4陷阱:切割問題 584
15.3.5陷阱:不使用虛成員函式 585
15.3.6陷阱:試圖對虛成員函式定義不齊全的類進行編譯 585
15.3.7編程提示:使析構函式成為虛函式 586
小結 587
自測題答案 587
編程項目 590
第16章異常處理 597
16.1異常處理基礎 598
16.1.1異常處理的簡單例子 599
16.1.2定義自己的異常類 605
16.1.3多個throw塊和catch塊 606
16.1.4陷阱:首先捕捉較具體的異常 607
16.1.5編程提示:異常類可能很簡單 608
16.1.6在函式中拋出異常 609
16.1.7異常規範 610
16.1.8陷阱:派生類中的異常規範 611
16.2用於異常處理的編程技術 612
16.2.1拋出異常的時機 612
16.2.2陷阱:未捕捉的異常 613
16.2.3陷阱:嵌套try-catch塊 613
16.2.4陷阱:濫用異常 614
16.2.5異常類層次結構 614
16.2.6測試可用記憶體 614
16.2.7重新拋出異常 615
小結 615
自測題答案 615
編程項目 616
第17章模板 619
17.1用於算法抽象的模板 620
17.1.1函式模板 621
17.1.2陷阱:編譯器的複雜性 624
17.1.3編程實例:泛化排序函式 625
17.1.4編程提示:如何定義模板 628
17.1.5陷阱:為不恰當的類型使用模板 628
17.2用於數據抽象的模板 628
17.2.1類模板的語法 629
17.2.2編程實例:數組類 631
小結 634
自測題答案 634
編程項目 636
第18章標準模板庫 639
18.1疊代器 640
18.1.1using聲明 641
18.1.2疊代器的基礎知識 641
18.1.3陷阱:編譯器問題 645
18.1.4疊代器的種類 646
18.1.5常量和可變疊代器 648
18.1.6逆向疊代器 649
18.1.7其他種類的疊代器 650
18.2容器 651
18.2.1順序容器 651
18.2.2陷阱:疊代器和刪除元素 654
18.2.3編程提示:容器中的類型定義 654
18.2.4容器配接器stack和queue 655
18.2.5關聯容器set和map 657
18.2.6效率問題 662
18.3泛型算法 662
18.3.1運行時間和大O表示法 663
18.3.2容器訪問運行時間 666
18.3.3不修改容器的算法 666
18.3.4會修改容器的算法 670
18.3.5set算法 670
18.3.6排序算法 671
小結 672
自測題答案 672
編程項目 673
附錄1C++關鍵字 679
附錄2操作符的優先權 680
附錄3ASCII字元集 681
附錄4部分庫函式 682
附錄5內聯函式 686
附錄6重載數組索引方括弧 687
附錄7this指針 688
附錄8將操作符重載為成員操作符 690

相關詞條

熱門詞條

聯絡我們