內容簡介
本書是一本講解C++編程的優秀教材,全面介紹了面向對象編程的原理和方法,詳細分析了與C++編程有關的技術,具體包括類與對象、控制語句、函式與遞歸、數組、指針、運算符重載、繼承、多態、模板、流輸入/輸出、異常處理、檔案處理、搜尋與排序、數據結構、標準模板庫等內容,本書的同步學習網站上還包含了更多的擴展內容。全書以“活代碼”方式詳細分析了每個知識要點,是初學者和中高級程式設計師學習C++編程的理想用書。
本書可作為高等院校相關專業的程式語言教材和C++編程教材,也是軟體設計人員學習C++編程的理想讀物。
圖書目錄
第1章 計算機、Internet和全球資訊網簡介 1
1.1 簡介 2
1.2 計算機:硬體和軟體 3
1.3 計算機的組成 3
1.4 個人計算、分散式計算和客戶/伺服器計算 4
1.5 Internet和全球資訊網 4
1.6 Web 2.0 4
1.7 機器語言、彙編語言和高級語言 5
1.8 C和C++的歷史 6
1.9 C++標準庫 7
1.10 Java的歷史 8
1.11 FORTRAN、COBOL、Pascal和Ada 8
1.12 BASIC、Visual Basic、Visual C++、C#和.NET 9
1.13 主要的軟體趨勢:對象技術 9
1.14 典型的C++開發環境 10
1.15 關於C++和本書的幾點說明 12
1.16 試運行一個C++應用程式 12
1.17 軟體技術 17
1.18 C++的未來:開源Boost庫、TR1和C++0x 17
1.19 軟體工程實例研究:對象技術和UML介紹 18
1.20 本章小結 21
1.21 Web資源 22
第2章 C++編程入門 30
2.1 簡介 30
2.2 第一個C++程式:列印一行文本 31
2.3 修改第一個C++程式 33
2.4 另一個C++程式:整數相加 34
2.5 記憶體的概念 38
2.6 算術運算 38
2.7 判斷:相等運算符和關係運算符 41
2.8 本章小結 44
第3章 類和對象介紹 53
3.1 簡介 53
3.2 類、對象、成員函式和數據成員 54
3.3 定義具有成員函式的類 55
3.4 定義具有形參的成員函式 57
3.5 數據成員、set函式和get函式 60
3.6 使用構造函式初始化對象 65
3.7 一個類對應一個獨立檔案的可復用性 67
3.8 接口與實現的分離 70
3.9 用set函式確認數據的有效性 74
3.10 本章小結 78
第4章 控制語句(第I部分) 84
4.1 簡介 84
4.2 算法 85
4.3 偽代碼 85
4.4 控制結構 86
4.5 if選擇語句 89
4.6 if...else雙路選擇語句 90
4.7 while循環語句 94
4.8 算法詳述:計數器控制的循環 95
4.9 算法詳述:標記控制的循環 100
4.10 算法詳述:嵌套的控制語句 107
4.11 賦值運算符 111
4.12 自增和自減運算符 112
4.13 本章小結 114
第5章 控制語句(第II部分) 127
5.1 簡介 127
5.2 計數器控制的循環的要素 128
5.3 for循環語句 129
5.4 使用for語句的例子 132
5.5 do...while循環語句 136
5.6 switch多路選擇語句 137
5.7 break和continue語句 144
5.8 邏輯運算符 145
5.9 ==運算符與=運算符的混淆問題 148
5.10 結構化編程小結 149
5.11 本章小結 153
第6章 函式和遞歸入門 162
6.1 簡介 163
6.2 C++的程式組件 163
6.3 數學庫函式 164
6.4 多形參函式定義 165
6.5 函式原型和實參類型的強制轉換 168
6.6 C++標準庫頭檔案 170
6.7 實例研究:隨機數生成 171
6.8 實例研究:博彩遊戲和enum簡介 175
6.9 存儲類別 178
6.10 作用域規則 180
6.11 函式調用堆疊和活動記錄 182
6.12 無參函式 185
6.13 內聯函式 186
6.14 引用和引用形參 187
6.15 默認實參 190
6.16 一元作用域分辨運算符 191
6.17 函式重載 192
6.18 函式模板 194
6.19 遞歸 196
6.20 遞歸套用示例:Fibonacci數列 199
6.21 遞歸與疊代 201
6.22 本章小結 203
第7章 數組與vector 220
7.1 簡介 221
7.2 數組 221
7.3 聲明數組 222
7.4 使用數組的範例 223
7.5 將數組傳遞給函式 233
7.6 實例研究:利用數組存放成績的GradeBook類 236
7.7 採用線性查找法查找數組 240
7.8 採用插值排序法排序數組 241
7.9 多維數組 243
7.10 實例研究:利用二維數組的GradeBook類 245
7.11 C++標準庫類模板vector介紹 250
7.12 本章小結 254
第8章 指針 268
8.1 簡介 269
8.2 指針變數的聲明和初始化 269
8.3 指針運算符 270
8.4 使用指針的按引用傳遞方式 272
8.5 使用const修飾指針 275
8.6 使用按引用傳遞方式實現的選擇排序 278
8.7 sizeof運算符 281
8.8 指針表達式和指針算術運算 283
8.9 指針和數組之間的聯繫 285
8.10 基於指針的字元串處理 287
8.11 指針數組 289
8.12 函式指針 289
8.13 本章小結 292
第9章 類的深入剖析(第I部分) 307
9.1 簡介 307
9.2 Time類實例研究 308
9.3 類的作用域和類成員的訪問 313
9.4 接口與實現的分離 314
9.5 訪問函式和工具函式 315
9.6 Time類實例研究:默認實參的構造函式 317
9.7 析構函式 321
9.8 何時調用構造函式和析構函式 321
9.9 Time類實例研究:微妙的陷阱—返回private數據成員引用 324
9.10 默認的逐個成員賦值 326
9.11 本章小結 327
第10章 類的深入剖析(第II部分) 333
10.1 簡介 333
10.2 const對象和const成員函式 334
10.3 組成:對象作為類的成員 340
10.4 friend函式和friend類 345
10.5 使用this指針 347
10.6 static類成員 351
10.7 數據抽象和信息隱藏 354
10.8 本章小結 356
第11章 運算符重載 361
11.1 簡介 362
11.2 運算符重載的基礎知識 362
11.3 運算符重載的限制 363
11.4 作為類成員函式和全局函式的運算符函式之比較 364
11.5 重載流插入運算符和流提取運算符 365
11.6 重載一元運算符 368
11.7 重載二元運算符 368
11.8 動態記憶體管理 369
11.9 實例研究:Array類 370
11.10 類型轉換 379
11.11 構建String類 380
11.12 重載++和--運算符 381
11.13 實例研究:Date類 382
11.14 標準庫中的string類 386
11.15 explicit構造函式 388
11.16 代理類 391
11.17 本章小結 393
第12章 面向對象編程:繼承 403
12.1 簡介 404
12.2 基類和派生類 405
12.3 protected成員 406
12.4 基類和派生類之間的關係 407
12.5 派生類中的構造函式和析構函式 428
12.6 public、protected和private繼承 434
12.7 關於繼承的軟體工程 435
12.8 本章小結 436
第13章 面向對象編程:多態性 440
13.1 簡介 441
13.2 多態性實例 442
13.3 類繼承層次中對象之間的關係 443
13.4 類型域和switch語句 455
13.5 抽象類和純virtual函式 456
13.6 實例研究:套用多態性的工資發放系統 457
13.7 (選讀)多態性、virtual函式和動態綁定的底層實現機制 470
13.8 實例研究:套用向下強制類型轉換、dynamic_cast、typeid和type_info並使用
多態性和運行時類型信息的工資發放系統 473
13.9 virtual析構函式 475
13.10 本章小結 476
第14章 模板 481
14.1 簡介 481
14.2 函式模板 482
14.3 重載函式模板 484
14.4 類模板 485
14.5 類模板的非類型參數和默認類型 489
14.6 模板和繼承的注意事項 490
14.7 模板和友元的注意事項 491
14.8 模板和靜態成員的注意事項 492
14.9 本章小結 492
第15章 輸入/輸出流 496
15.1 簡介 497
15.2 流 497
15.3 輸出流 500
15.4 輸入流 501
15.5 使用read,write和gcount的非格式化的I/O 504
15.6 流操縱符簡介 505
15.7 流的格式狀態和流操縱符 509
15.8 流的錯誤狀態 515
15.9 將輸出流連線到輸入流 517
15.10 本章小結 517
第16章 異常處理 526
16.1 簡介 527
16.2 異常處理總覽 527
16.3 實例:處理除數為0的異常 528
16.4 什麼時候使用異常處理 532
16.5 重新拋出異常 533
16.6 異常規格 534
16.7 處理意料之外的異常 534
16.8 堆疊展開 535
16.9 構造函式、析構函式和異常處理 536
16.10 異常和繼承 537
16.11 處理new失敗 537
16.12 類auto_ptr和動態記憶體分配 539
16.13 標準庫異常類層次 541
16.14 其他異常處理技術 542
16.15 本章小結 542
第17章 檔案處理 548
17.1 簡介 548
17.2 數據層次 549
17.3 檔案和流 550
17.4 創建順序檔案 551
17.5 從順序檔案讀取數據 554
17.6 更新順序檔案 558
17.7 隨機存取檔案 558
17.8 創建隨機存取檔案 559
17.9 向隨機存取檔案隨機寫入數據 562
17.10 從隨機存取檔案順序讀取數據 564
17.11 實例研究:事務處理程式 565
17.12 對象序列化概述 570
17.13 本章小結 570
第18章 string類和字元串流處理 580
18.1 簡介 581
18.2 字元串的賦值和連線 582
18.3 字元串的比較 583
18.4 子串 585
18.5 交換字元串 585
18.6 string類的特徵 586
18.7 查找字元串中的子串和字元 588
18.8 在字元串中替換字元 589
18.9 在字元串中插入字元 591
18.10 轉換成C風格的基於指針的char *字元串 591
18.11 疊代器 592
18.12 字元串流處理 593
18.13 本章小結 595
第19章 搜尋和排序 602
19.1 簡介 603
19.2 搜尋算法 603
19.3 排序算法 608
19.4 本章小結 614
第20章 數據結構 619
20.1 簡介 619
20.2 自引用類 620
20.3 動態記憶體分配和數據結構 621
20.4 鍊表 621
20.5 堆疊 632
20.6 佇列 635
20.7 樹 638
20.8 本章小結 644
第21章 位、字元、C字元串和結構體 653
21.1 簡介 654
21.2 結構體的定義 654
21.3 初始化結構體 656
21.4 在函式中使用結構體 656
21.5 typedef 656
21.6 示例:洗牌與發牌模擬 656
21.7 位運算符 658
21.8 位域 665
21.9 字元處理庫 668
21.10 基於指針的字元串處理函式 671
21.11 基於指針的字元串轉換函式 677
21.12 基於指針的字元串處理庫中的搜尋函式 680
21.13 基於指針的字元串處理庫中的記憶體函式 683
21.14 本章小結 686
第22章 標準模板庫 700
22.1 標準模板庫(STL)簡介 701
22.2 序列容器 709
22.3 關聯容器 719
22.4 容器適配器 725
22.5 算法 728
22.6 bitset類 750
22.7 函式對象 752
22.8 本章小結 755
22.9 Web上的STL資源 755
附錄A 運算符的優先權與結合律 765
附錄B ASCII字元集 767
附錄C 基本數據類型 768
附錄D 計數系統 769
附錄E 預處理器 779
索引 790