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

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

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

圖書簡介

全書共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.2.4軟體生命周期 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.3強制類型轉換 129

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

4.6.3自動類型轉換 163

小結 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抽象數據類型 395

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.4拷貝構造函式 451

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

相關詞條

熱門詞條

聯絡我們