內容簡介
本書是一本面向初學者的C++程式設計教材,以面向對象程式設計為主線,突出C++的基本特點,介紹了C++1y的重要新特性。全書共分為4篇13個單元。
第1篇:C++面向對象啟步。用4個單元幫助初學者建立面向對象的問題分析思維,掌握相關方法和語法知識,樹立面向對象程式中“一切皆對象,一切來自類”的意識,初步領略面向對象程式設計之奧妙。
第2篇:基於類的C++程式框架設計。用3個單元幫助讀者理解如何在一個程式中組織類以及什麼樣的類之間結構才是好的程式結構,進一步提升讀者“程式設計 = 計算思維 + 語言藝術”的觀念。
第3篇:C++泛型程式設計。用兩個單元介紹多態和STL。C++的泛型的通用、靈活的特點將給讀者的學習帶來一定樂趣,也為讀者將來從事程式開發工作提供了更多便捷方法。
第4篇:C++深入編程。用4個單元介紹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.1.4 數據類型 7
1.2 表達式 10
1.2.1 字面值 10
1.2.2 數據實體 10
1.2.3 含有操作符的表達式及其基本求值規則 12
1.3 類的成員函式 13
1.3.1 函式的關鍵環節 13
1.3.2 對象的生成與構造函式 15
1.3.3 標準輸出流out與printEmployee() 函式 17
1.3.4 析構函式 18
1.3.5 一個完整的Employee類 18
1.4 主函式 19
1.4.1 主函式及其結構 19
1.4.2 測試Employee類的主函式 19
1.5 構造函式重載 20
1.5.1 函式重載的概念 20
1.5.2 不同參數數目的構造函式重載 21
1.5.3 複製構造函式 21
1.6 程式編譯 24
1.6.1 編譯預處理 24
1.6.2 編譯與連線 26
1.6.3 多檔案程式的編譯 26
1.7 知識連結 28
1.7.1 指針=基類型+地址 28
1.7.2 指向對象的指針與this 30
1.7.3 引用 32
習題1 33
第2單元 簡單桌面計算器 38
2.1 簡單桌面計算器建模 38
2.1.1 簡單桌面計算器分析 38
2.1.2 Calculator類的聲明 38
2.2 calculate( )函式的實現 39
2.2.1 用if-else結構實現成員函式calculate( ) 39
2.2.2 用switch結構實現calculate( ) 41
2.2.3 if-else判斷結構與switch判斷結構比較 42
2.2.4 Culculator類測試 43
2.2.5 發現運行異常的程式測試 44
2.3 C++異常處理 45
2.3.1 程式錯誤 45
2.3.2 C++異常處理機制 47
2.3.3 在同一個函式中拋擲並處理異常 48
2.3.4 異常的拋擲與檢測處理分在不同函式中 50
2.3.5 拋擲多個異常 51
2.3.6 用類作為異常類型 52
2.3.7 捕獲任何異常 55
2.4 簡單桌面計算器的改進 56
2.4.1 使用浮點數計算的Calculator類 56
2.4.2 從鍵盤輸入算式 58
2.5 實現多算式計算 60
2.5.1 用一個數據成員存儲中間結果 60
2.5.2 用一個靜態局部變數存儲中間結果 62
2.5.3 用一個靜態成員變數存儲中間結果 63
2.6 使用重複結構實現任意多算式計算 65
2.6.1 用while循環實現任意多算式計算 65
2.6.2 用do-while循環實現任意多算式計算 66
2.7 知識連結 67
2.7.1 條件表達式 67
2.7.2 左值表達式與右值表達式 67
2.7.3 標識符的域 69
2.7.4 變數的生命期與存儲分配 70
2.7.5 類屬變數、實例變數與局部變數的比較 71
習題2 72
第3單元 素數產生器 76
3.1 問題描述與對象建模 76
3.1.1 對象建模 76
3.1.2 getPrimeSequence( )函式的基本思路 77
3.2 使用isPrime(?)的PrimeGenerator類實現 77
3.2.1 用for結構實現的getPrimeSequence(?)函式 77
3.2.2 用for結構實現的isPrime(?)函式 79
3.2.3 完整的PrimeGenerator類及其測試 79
3.3 不使用isPrime(?)的PrimeGenerator類實現 80
3.3.1 採用嵌套重複結構的getPrimeSequence( )函式 80
3.3.2 重複結構中的continue語句和break語句 81
3.4 知識連結 82
3.4.1 C++操作符 82
3.4.2 具有副作用的表達式與序列點 83
3.4.3 算術類型轉換 85
3.4.4 類型轉換構造函式與explicit關鍵字 87
3.4.5 表達式類型的推斷與獲取:auto 與decltype 91
3.4.6 C++語句 92
習題3 93
第4單元 Time類 97
4.1 Time類需求分析與操作符重載 97
4.1.1 Time類需求分析 97
4.1.2 關鍵字operator與操作符重載 98
4.1.3 操作符+的重載 99
4.1.5 增量操作符++的重載 100
4.1.5 用友元函式實現<<重載 103
4.1.6 賦值操作符=的重載 104
4.1.7 操作符重載的基本規則 105
4.1.8 Time類的類型轉換構造函式 107
4.2 淺複製與深複製 109
4.2.1 數據複製及其問題 109
4.2.2 複製構造函式再討論 111
4.2.3 深複製的賦值操作符重載 113
4.3 動態記憶體分配 114
4.3.1 用new進行動態記憶體分配 114
4.3.2 用delete釋放動態存儲空間 115
4.3.3 對象的動態存儲分配 116
4.3.4 動態記憶體分配時的異常處理 118
4.4 知識連結 119
4.4.1 友元 119
4.4.2 智慧型指針 123
習題4 124
第2篇 基於類的C++程式架構
第5單元 繼承 133
5.1 單基繼承 133
5.1.1 公司人員的類層次結構模型 133
5.1.2 C++繼承關係的建立 133
5.1.3 在派生類中重定義基類成員函式 137
5.1.4 基於血緣關係的訪問控制——protected 139
5.1.5 類層次結構中構造函式和析構函式的執行順序 140
5.2 類層次中的賦值兼容規則與里氏代換原則 143
5.2.1 公開派生的賦值兼容規則 143
5.2.2 里氏代換原則 144
5.2.3 對象的向上轉換和向下轉換 144
5.3 多基繼承 145
5.3.1 C++多基繼承格式 145
5.3.2 計算機系統=軟體+硬體問題的類結構 145
5.3.3 多基繼承的歧義性問題 148
5.3.4 虛基類 149
習題5 150
第6單元 虛函式與動態綁定 154
6.1 畫圓、三角形和矩形問題的類結構 154
6.1.1 3個分立的類 154
6.1.2 為3個分立的類設計一個公共父類 154
6.2 用虛函式實現動態綁定 155
6.2.1 虛函式與動態綁定 155
6.2.2 虛函式表 156
6.2.3 虛函式規則 157
6.2.4 用override和final修飾虛函式 159
6.2.5 純虛函式與抽象類 161
6.3 運行時類型鑑別 163
6.3.1 RTTI概述 163
6.3.2 dynamic_cast 163
6.3.3 type_info類與typeid操作符 169
習題6 172
第7單元 面向對象程式結構最佳化 176
7.1 面向對象程式設計最佳化規則 176
7.1.1 引言 176
7.1.2 從可重用說起:合成/聚合優先原則 178
7.1.3 從可維護性說起:開閉原則 180
7.1.4 面向抽象原則 182
7.1.5 單一職責原則 188
7.1.6 接口分離原則 189
7.1.7 不要和陌生人說話 193
7.2 GoF設計模式舉例:工廠模式 195
7.2.1 概述 195
7.2.2 簡單工廠模式 196
7.2.3 工廠方法模式 198
習題7 200
第3篇 泛型程式設計
第8單元 模板 205
8.1 算法抽象模板——函式模板 205
8.1.1 從函式重載到函式模板 205
8.1.2 函式模板的實例化與具體化 206
8.2 數據抽象模板——類模板 209
8.2.1 類模板的定義 209
8.2.2 類模板的實例化與具體化 210
8.2.3 類模板的使用 211
8.2.4 類模板實例化時的異常處理 213
8.2.5 實例:MyVector模板類的設計 214
8.3 知識連結:數組 218
8.3.1 數組的特點 218
8.3.2 數組的定義與泛化常量表達式 218
8.3.3 數組的初始化規則 220
8.3.4 對象數組 221
8.3.5 數組存儲空間的動態分配 223
習題8 223
第9單元 STL編程 230
9.1 STL概述 230
9.1.1 容器 230
9.1.2 疊代器 232
9.1.3 容器的成員函式 235
9.1.4 STL算法 238
9.1.5 函式對象 241
9.1.6 基於範圍的for循環 243
9.1.7 STL標準頭檔案 244
9.2 撲克遊戲——vector容器套用實例 245
9.2.1 vector容器的特點 245
9.2.2 撲克遊戲對象模型 245
9.2.3 用vector容器對象poker存儲54張撲克牌 246
9.2.4 洗牌函式設計 249
9.2.5 整牌函式設計 252
9.2.6 發牌函式設計 253
9.2.7 vector操作小結 256
9.3 list容器及其套用實例 257
9.3.1 構建list對象及其疊代器 257
9.3.2 操作list對象 258
9.3.3 基於list容器的約瑟夫斯問題求解 262
9.4 string 265
9.4.1 字元串對象的創建與特性描述 266
9.4.2 字元串對象的輸入/輸出 266
9.4.3 字元串的疊代器與字元操作 267
9.4.4 兩字元串間的操作 271
9.5 stack容器 273
9.5.1 stack及其特點 273
9.5.2 stack的操作 273
9.5.3 套用舉例:將一個十進制整數轉換為K進制數 274
9.6 關聯容器 276
9.6.1 用結構體定義的pair類模板 276
9.6.2 set和multiset容器 278
9.6.3 map和multimap容器 282
9.7 知識連結 286
9.7.1 const_iterator 286
9.7.2 分配器 287
習題9 288
第4篇 C++深入編程
第10單元 C++實體與名字 293
10.1 C++的存儲屬性 293
10.1.1 外部變數與extern關鍵字 293
10.1.2 static關鍵字 296
10.2 名字空間域 301
10.2.1 名字衝突與名字空間 301
10.2.2 名字空間的使用 305
10.2.3 無名名字空間和全局名字空間 307
習題10 308
第11單元 C++字面值與常量 311
11.1 字面值 311
11.1.1 整型字面值的表示和辨識 311
11.1.2 浮點類型字面值的表示和辨識 312
11.1.3 字元字面值 313
11.1.4 bool類型與bool常量 314
11.1.5 枚舉類型與枚舉常量 315
11.1.6 強類型枚舉 317
11.2 const關鍵字 318
11.2.1 const符號常量 318
11.2.2 const用於指針聲明 320
11.2.3 const限定類成員與對象 323
11.3 C++11的右值引用 326
11.3.1 右值引用的概念 326
11.3.2 C++11關於左值和右值概念的深化 327
11.3.3 C++的引用綁定規則 327
11.3.4 C++11的引用摺疊規則 329
11.3.5 C++11的模板參數類型推導規則 330
習題11 330
第12單元 C++函式探幽 336
12.1 函式調用時的參數匹配與保護 336
12.1.1 函式調用時的參數匹配規則 336
12.1.2 形參帶有默認值的函式 337
12.1.3 參數數目可變的函式 339
12.2 參數類型 339
12.2.1 值傳遞:變數/對象參數 339
12.2.2 地址傳遞:地址/指針參數 341
12.2.3 數組參數 342
12.2.4 名字傳遞:引用參數 344
12.2.5 const限定函式參數 347
12.3 移動語義與完美轉發 348
12.3.1 移動語義 348
12.3.2 完美轉發 351
12.4 函式返回 354
12.4.1 函式返回的基本規則 354
12.4.2 返回指針類型的函式 355
12.4.3 類型的返回左值引用 356
12.4.4 ??const限定函式返回值 358
12.5 Lambda表達式 360
12.5.1 簡單的Lambda表達式 360
12.5.2 在方括弧中加入函式對象參數 361
習題12 363
第13單元 C++ I/O流 366
13.1 流與C++流類 366
13.1.1 流與緩衝區 366
13.1.2 C++流類庫 367
13.1.3 ios類聲明 369
13.2 標準流對象與標準I/O流操作 370
13.2.1 C++標準流對象 370
13.2.2 標準輸入/輸出流操作 370
13.3 流的格式化 371
13.3.1 ios類的格式化成員函式和格式化標誌 371
13.3.2 格式化操作符 371
13.4 檔案流 372
13.4.1 檔案流的概念及其分類 372
13.4.2 檔案操作過程 373
13.5 流的錯誤狀態及其處理 377
13.5.1 流的出錯狀態 377
13.5.2 測試與設定出錯狀態位的ios類成員函式 377
習題13 377
附錄A C++保留字 379
A.1 C++關鍵字 379
A.2 C++替代標記 379
A.3 C++庫保留名稱 380
A.4 C++特定字 380
附錄B C++運算符的優先權別和結合方向 381
附錄C C++標準庫 383
C.1 C++標準庫頭檔案 383
C.1.1 標準庫中與語言支持功能相關的頭檔案 383
C.1.2 支持流輸入/輸出的頭檔案 384
C.1.3 與診斷功能相關的頭檔案 384
C.1.4 定義工具函式的頭檔案 384
C.1.5 支持字元串處理的頭檔案 384
C.1.6 定義容器類的模板的頭檔案 384
C.1.7 支持疊代器的頭檔案 385
C.1.8 有關算法的頭檔案 385
C.1.9 有關數值操作的頭檔案 385
C.1.10 有關本地化的頭檔案 385
C.2 Boost庫內容 385
C.2.1 字元串和文本處理庫 386
C.2.2 容器庫 386
C.2.3 疊代器庫 387
C.2.4 算法庫 387
C.2.5 函式對象和高階編程庫 387
C.2.6 泛型編程庫 388
C.2.7 模板元編程 388
C.2.8 預處理元編程庫 388
C.2.9 並發編程庫 388
C.2.10 數學和數字型檔 388
C.2.11 排錯和測試庫 389
C.2.12 數據結構庫 389
C.2.13 圖像處理庫 389
C.2.14 輸入/輸出庫 390
C.2.15 跨語言混合編程庫 390
C.2.16 記憶體管理庫 390
C.2.17 解析庫 390
C.2.18 編程接口庫 390
C.2.19 綜合類庫 390
C.2.20 編譯器問題的變通方案庫 391
參考文獻 392