內容簡介
本書是一本面向大學計算機專業的C++程式設計教材,以面向對象程式設計為主線,突出C++的基本特點,介紹C++1y的重要新特性。全書共分為4篇11個單元。
第1篇:C++面向對象起步。用4個單元幫助初學者建立面向對象的問題分析思維,掌握相關方法和語法知識,樹立面向對象程式中“一切皆對象,一切來自類”的意識,初步領略面向對象程式設計的奧妙。
第2篇:C++面向抽象程式設計。用兩個單元介紹C++的繼承機制,並幫助讀者理解如何在一個程式中組織類,以及什麼樣的類結構才是好的程式結構。
第3篇:C++泛型程式設計。用兩個單元介紹多態性和STL。C++的泛型的通用、靈活的特點將給讀者的學習帶來一定樂趣,也為讀者將來從事程式開發工作提供了更多便捷方法。
第4篇:C++深入編程。用3個單元介紹C++實體訪問、函式和I/O流等方面的細節和內容,進一步豐富程式設計語言機制,使讀者在程式開發上能夠錦上添花。
本書理念先進、概念清晰、講解透徹、便於理解。書中例題經典、習題豐富、覆蓋面廣,適合作為高等學校各專業的面向對象程式設計教材。本書還可供培訓機構使用,也可供相關領域人員自學。
圖書目錄
第1篇 C++面向對象起步
第1單元 職員類 3
1.1 從具體對象到職員類 3
1.1.1 具體職員對象的分析與描述 3
1.1.2 Employee類的聲明 4
1.1.3 C++保留字、標識符與名字空間 5
1.2 C++基本數據類型 7
1.2.1 C++算術數據類型的表示格式 7
1.2.2 C++算術數據類型的取值範圍 9
1.2.3 C++運算符與算術數據類型的操作集合 10
1.3 表達式 11
1.3.1 字面值 11
1.3.2 數據實體 11
1.3.3 含有操作符的表達式 13
1.3.4 表達式中的隱式數據類型轉換 14
1.4 函式 15
1.4.1 函式的關鍵環節 15
1.4.2 標準輸出流cout與printEmployee() 函式 17
1.4.3 構造函式與析構函式 18
1.4.4 構造函式重載 21
1.4.5 複製構造函式 22
1.4.6 主函式 24
1.5.1 編譯預處理 26
1.5.2 編譯和連線 28
1.5.3 多檔案程式的編譯 28
1.6 知識連結 30
1.6.1 C++字面值 30
1.6.2 const符號常量 33
1.6.3 指針=基類型+地址 34
1.6.4 指向對象的指針與this 36
1.6.5 引用 38
習題1 39
第2單元 簡單計算器 44
2.1 簡單計算器建模 44
2.1.1 簡單計算器分析 44
2.1.2 Calculator類的聲明 44
2.2 calculate( )函式的實現 45
2.2.1 布爾類型與關係運算符 45
2.2.2 用if-else結構實現成員函式calculate( ) 46
2.2.3 用switch結構實現calculate( ) 48
2.2.4 if-else判斷結構與switch判斷結構比較 49
2.2.5 Calculator類測試 49
2.3 C++異常處理 52
2.3.1 程式錯誤 52
2.3.2 C++異常處理機制 54
2.3.3 C++異常處理技術 55
2.3.4 用類作為異常類型 58
2.3.5 捕獲任何異常 62
2.4 簡單桌面計算器的改進 63
2.4.1 使用浮點數計算的Calculator類 63
2.4.2 標準輸入流與鍵盤輸入 64
2.4.3 簡單多項式計算的實現 67
2.4.4 用重複結構實現任意多項式計算 72
2.5 知識連結 74
2.5.1 條件表達式 74
2.5.2 局部變數 74
2.5.3 類屬變數、實例變數與局部變數的比較 76
習題2 76
第3單元 素數產生器 81
3.1 問題描述與對象建模 81
3.1.1 對象建模 81
3.1.2 getPrimeSequence( )函式的基本思路 82
3.2 使用isPrime( )的PrimeGenerator類實現 82
3.2.1 用for結構實現的getPrimeSequence( )函式 82
3.2.2 用for結構實現的isPrime( )函式 84
3.2.3 完整的PrimeGenerator類及其測試 84
3.3 不使用isPrime( )的PrimeGenerator類實現 85
3.3.1 採用嵌套重複結構的getPrimeSequence( )函式 85
3.3.2 重複結構中的continue語句和break語句 86
3.4 數組 87
3.4.1 數組及其定義 87
3.4.2 數組的初始化規則 89
3.4.3 用數組存儲素數序列 90
3.4.4 sizeof操作符 91
3.4.5 C++11中基於容器的for循環 91
3.4.6 數組prime的聲明 92
3.5 string類型 94
3.6 知識連結 94
3.6.1 C++操作符 94
3.6.2 左值表達式與右值表達式 96
3.6.3 具有副作用的表達式與序列點 97
3.6.4 表達式類型的推斷與獲取:auto 與decltype 98
3.6.5 類型轉換構造函式與explicit關鍵字 101
3.6.6 C++語句 105
習題3 105
第4單元 Time類 110
4.1 Time類需求分析與操作符重載 110
4.1.1 Time類需求分析 110
4.1.2 關鍵字operator與操作符重載 111
4.1.3 操作符+的重載 112
4.1.4 增量操作符++的重載 113
4.1.5 用友元函式實現<<重載 116
4.1.6 賦值操作符=的重載 117
4.1.7 操作符重載的基本規則 118
4.1.8 Time類的類型轉換構造函式 120
4.2 淺複製與深複製 122
4.2.1 數據複製及其問題 122
4.2.2 複製構造函式再討論 124
4.2.3 深複製的賦值操作符重載 126
4.3 動態記憶體分配 127
4.3.1 用new進行動態記憶體分配 127
4.3.2 用delete釋放動態存儲空間 128
4.3.3 對象的動態存儲分配 129
4.3.4 動態記憶體分配時的異常處理 131
4.4 對象數組 132
4.4.1 對象數組的定義 132
4.4.2 對象數組元素的訪問 133
4.4.3 數組存儲空間的動態分配 134
4.5 知識連結 134
4.5.1 友元 134
4.5.2 const修飾類成員與對象 138
4.5.3 enum類型 140
習題4 144
第2篇 C++面向抽象程式設計
第5單元 繼承 153
5.1 單基繼承 153
5.1.1 公司人員的類層次結構模型 153
5.1.2 C++繼承關係的建立 153
5.1.3 在派生類中重定義基類成員函式 157
5.1.4 基於血緣關係的訪問控制——protected 159
5.1.5 類層次結構中構造函式和析構函式的執行順序 160
5.2 類層次中的賦值兼容規則與里氏代換原則 163
5.2.1 類層次中的類型賦值兼容規則 163
5.2.2 里氏代換原則 164
5.2.3 對象的向上轉換和向下轉換 164
5.3 多基繼承 165
5.3.1 C++多基繼承格式 165
5.3.2 計算機系統=軟體+硬體問題的類結構 165
5.3.3 多基繼承的歧義性問題 167
5.3.4 虛擬基類 169
5.4 用虛函式實現動態綁定 170
5.4.1 畫圓、三角形和矩形問題的類結構 170
5.4.2 虛函式與動態綁定 171
5.4.3 虛函式表與虛函式規則 173
5.4.4 override和final 175
5.4.5 純虛函式與抽象類 177
5.5 運行時類型鑑別 179
5.5.1 RTTI概述 179
5.5.2 dynamic_cast 179
5.5.3 type_info類與typeid操作符 185
習題5 188
第6單元 C++程式結構最佳化 195
6.1 面向對象程式設計的幾個原則 195
6.1.1 引言 195
6.1.2 從可重用說起:合成/聚合優先原則 197
6.1.3 從可維護性說起:開閉原則 199
6.1.4 面向抽象原則 201
6.1.5 單一職責原則 207
6.1.6 接口分離原則 208
6.1.7 不要和陌生人說話 212
6.2 GoF設計模式舉例:工廠模式 214
6.2.1 概述 214
6.2.2 簡單工廠模式 215
6.2.3 工廠方法模式 217
習題6 219
第3篇 C++泛型程式設計
第7單元 模板 223
7.1 算法抽象模板--函式模板 223
7.1.1 從函式重載到函式模板 223
7.1.2 函式模板的實例化與具體化 224
7.2 數據抽象模板--類模板 227
7.2.1 類模板的定義 227
7.2.2 類模板的實例化與具體化 228
7.2.3 類模板的使用 230
7.2.4 類模板實例化時的異常處理 231
7.2.5 實例:MyVector模板類的設計 232
習題7 236
第8單元 STL編程 242
8.1 STL概述 242
8.1.1 容器 242
8.1.2 疊代器 244
8.1.3 容器的成員函式 247
8.1.4 STL算法 250
8.1.5 函式對象 253
8.1.6 STL標準頭檔案 255
8.2 撲克遊戲——vector容器套用實例 256
8.2.1 vector容器的特點 256
8.2.2 撲克遊戲對象模型 256
8.2.3 用vector容器對象poker存儲54張撲克牌 257
8.2.4 洗牌函式設計 260
8.2.5 整牌函式設計 263
8.2.6 發牌函式設計 264
8.2.7 vector操作小結 267
8.3 list容器及其套用實例 268
8.3.1 構建list對象及其疊代器 268
8.3.2 操作list對象 269
8.3.3 基於list容器的約瑟夫斯問題求解 273
8.4 string 276
8.4.1 字元串對象的創建與特性描述 277
8.4.2 字元串對象的輸入/輸出 277
8.4.3 字元串的疊代器與字元操作 278
8.4.4 兩個字元串間的操作 282
8.5 stack容器 284
8.5.1 stack及其特點 284
8.5.2 stack的操作 284
8.5.3 套用舉例:將一個十進制整數轉換為K進制數 285
8.6 關聯容器 287
8.6.1 用結構體定義的pair類模板 287
8.6.2 set和multiset容器 289
8.6.3 map和multimap容器 293
8.7 知識連結 297
8.7.1 const_iterator 297
8.7.2 分配器 298
習題8 299
第4篇 C++深入編程
第9單元 C++實體訪問探幽 305
9.1 C++實體的基本訪問屬性 305
9.1.1 變數的生命期與C++存儲分配 305
9.1.2 標識符的作用域與連結性 307
9.2 C++變數的存儲屬性 309
9.2.1 C++的extern關鍵字 309
9.2.2 C++的static關鍵字 313
9.3 C++名字空間域 320
9.3.1 名字衝突與名字空間 320
9.3.2 名字空間的使用 322
9.3.3 無名名字空間和全局名字空間 324
9.4 const指針與const引用 325
9.4.1 const修飾指針 325
9.4.2 const修飾引用 326
9.4.3 頂層const與底層const 327
9.5 C++11的左值引用與右值引用 329
9.5.1 C++11的左值引用與右值引用的基本概念 329
9.5.2 基於左值和右值概念的表達式分類 330
9.5.3 C++引用的擴展及綁定規則 330
9.5.4 C++ 11的引用摺疊與模板參數推導 333
9.6 智慧型指針 334
9.6.1 智慧型指針及其基本原理 334
9.6.2 auto_ptr智慧型指針 335
9.6.3 Boost庫的智慧型指針 337
習題9 339
第10單元 C++函式探幽 345
10.1 C++函式調用時的參數匹配規則 345
10.1.1 C++函式調用時的參數匹配規則 345
10.1.2 關於函式實參的計算順序 346
10.1.3 函式名重載 346
10.1.4 形參帶有默認值的函式 349
10.1.5 參數數目可變的函式 350
10.2 參數類型 351
10.2.1 對象參數 351
10.2.2 指針參數 353
10.2.3 數組參數 354
10.2.4 左值引用參數 356
10.2.5 const保護函式參數 359
10.2.6 完美轉發 360
10.3 函式返回 363
10.3.1 函式返回的基本規則 363
10.3.2 函式返回指針 363
10.3.3 函式返回引用 364
10.3.4 const保護函式返回值 367
10.4 移動語義 369
10.4.1 移動語義的提出 369
10.4.2 移動構造函式與移動賦值操作符 369
10.4.3 強制移動與std::move() 371
10.5 Lambda表達式 372
10.5.1 簡單的Lambda表達式 372
10.5.2 在方括弧中加入函式對象參數 373
習題10 375
第11單元 C++I/O流 379
11.1 流與C++流類 379
11.1.1 流與緩衝區 379
11.1.2 C++流類庫 380
11.1.3 ios類聲明 381
11.2 標準流對象與標準I/O流操作 383
11.2.1 C++標準流對象 383
11.2.2 標準輸入/輸出流操作 383
11.3 流的格式化 383
11.3.1 ios類的格式化成員函式和格式化標誌 384
11.3.2 格式化操作符 384
11.4 檔案流 385
11.4.1 檔案流的概念及其分類 385
11.4.2 檔案操作過程 386
11.5 流的錯誤狀態及其處理 389
11.5.1 流的出錯狀態 389
11.5.2 測試與設定出錯狀態位的ios類成員函式 390
習題11 390
附錄A C++保留字 392
A.1 C++關鍵字 392
A.2 C++替代標記 392
A.3 C++庫保留名稱 393
A.4 C++特定字 393
附錄B C++運算符的優先權別和結合方向 394
附錄C C++標準庫與準標準庫 396
C.1 C++標準庫頭檔案 396
C.1.1 標準庫中與語言支持功能相關的頭檔案 396
C.1.2 支持流輸入/輸出的頭檔案 396
C.1.3 與診斷功能相關的頭檔案 397
C.1.4 定義工具函式的頭檔案 397
C.1.5 支持字元串處理的頭檔案 397
C.1.6 定義容器類的模板的頭檔案 397
C.1.7 支持疊代器的頭檔案 398
C.1.8 有關算法的頭檔案 398
C.1.9 有關數值操作的頭檔案 398
C.1.10 有關本地化的頭檔案 398
C.2 C++ Boost庫內容 398
C.2.1 字元串和文本處理庫 399
C.2.2 容器庫 399
C.2.3 疊代器庫 399
C.2.4 算法庫 400
C.2.5 函式對象和高階編程庫 400
C.2.6 泛型編程庫 400
C.2.7 模板元編程 400
C.2.8 預處理元編程庫 401
C.2.9 並發編程庫 401
C.2.10 數學和數字型檔 401
C.2.11 排錯和測試庫 401
C.2.12 數據結構庫 402
C.2.13 圖像處理庫 402
C.2.14 輸入/輸出庫 402
C.2.15 跨語言混合編程庫 402
C.2.16 記憶體管理庫 402
C.2.17 解析庫 402
C.2.18 編程接口庫 402
C.2.19 綜合類庫 403
C.2.20 編譯器問題的變通方案庫 403
參考文獻 404
·VII·