齣版者的話
譯者序
前言
第1章 麵嚮對象編程 1
1.1 麵嚮過程的編程風格與麵嚮對象的編程風格 1
1.1.1 麵嚮過程的編程風格 1
1.1.2 麵嚮對象的編程風格 2
1.1.3 關係 3
1.1.4 課後練習 3
1.2 類與抽象數據類型 3
1.2.1 信息隱藏 3
1.2.2 封裝 4
1.2.3 抽象數據類型 4
1.2.4 課後練習 5
1.3 客戶/服務器模式與消息傳遞 5
1.3.1 客戶/服務器模式 6
1.3.2 消息傳遞與方法調用 6
1.3.3 課後練習 8
1.4 繼承與多態 8
1.4.1 繼承 8
1.4.2 多態 9
1.4.3 多態與遞歸 9
1.4.4 課後練習 11
1.5 接口與組件 11
1.5.1 接口 11
1.5.2 組件 12
1.5.3 課後練習 13
第2章 從C到C++ 14
2.1 名字空間 14
2.1.1 課後練習 17
2.2 C++輸入/輸齣簡介 18
2.2.1 操縱符 20
2.2.2 混閤使用C和C++的輸入/輸齣 23
2.2.3 課後練習 24
2.3 文件 24
2.3.1 測試文件的打開狀態 26
2.3.2 課後練習 26
2.4 若乾重要的C++特性 26
2.4.1 強製類型轉換 26
2.4.2 常數 28
2.4.3 數據類型bool 28
2.4.4 枚舉類型 28
2.4.5 定義變量 29
2.4.6 結構 30
2.4.7 課後練習 31
2.5 string類型 31
2.5.1 定義string類型的變量 31
2.5.2 轉換為C風格的字符串 31
2.5.3 字符串長度 32
2.5.4 讀寫string 32
2.5.5 賦值 33
2.5.6 字符串的連接 34
2.5.7 修改字符串 34
2.5.8 提取子串 36
2.5.9 查找 36
2.5.10 字符串比較 37
2.5.11 課後練習 38
2.6 函數 40
2.6.1 函數原型 40
2.6.2 main函數 44
2.6.3 引用 44
2.6.4 引用調用 42
2.6.5 引用返迴 43
2.6.6 內聯函數 44
2.6.7 函數默認參數 45
2.6.8 函數重載 46
2.6.9 函數簽名 47
2.6.10 課後練習 48
2.7 new和delete操作符 51
2.7.1 課後練習 53
2.8 例外處理 53
2.8.1 課後練習 56
2.9 補充材料 57
2.9.1 C++關鍵字 57
2.9.2 無名名字空間 57
2.9.3 無名聯閤 57
2.9.4 成員選擇符 58
2.10 常見編程錯誤 61
2.11 編程習題 69
第3章 類 72
3.1 類和對象 72
3.1.1 類聲明 72
3.1.2 C++的信息隱藏機製 73
3.1.3 成員選擇符 74
3.1.4 類範圍 75
3.1.5 關鍵字class和struct的區彆 75
3.1.6 類成員函數的定義 76
3.1.7 在程序中使用類 78
3.1.8 課後練習 78
3.2 示例程序:堆棧類 79
3.2.1 問題 79
3.2.2 示例程序的輸齣 79
3.2.3 解決方案 80
3.2.4 類的實現 81
3.2.5 代碼分析 82
3.2.6 程序設計建議 82
3.2.7 課後練習 82
3.3 效率和健壯性 82
3.3.1 通過引用來傳遞和返迴對象 82
3.3.2 const類型參數的對象引用 83
3.3.3 const成員函數 84
3.3.4 對成員函數進行重載以便處理兩種類型的字符串 85
3.3.5 課後練習 85
3.4 示例程序:時間標記類 86
3.4.1 問題 86
3.4.2 示例程序的輸齣 86
3.4.3 解決方案 88
3.4.4 類的實現 88
3.4.5 代碼分析 89
3.4.6 程序設計建議 91
3.4.7 課後練習 91
3.5 構造函數與析構函數 91
3.5.1 構造函數 92
3.5.2 對象數組與默認構造函數 93
3.5.3 通過構造函數約束對象的創建 94
3.5.4 拷貝構造函數 95
3.5.5 定義拷貝構造函數 96
3.5.6 禁止通過傳值方式傳遞和返迴類對象 100
3.5.7 轉型構造函數 101
3.5.8 轉型構造函數與隱式類型轉換 101
3.5.9 構造函數初始化程序 102
3.5.10 構造函數與操作符new和new[] 103
3.5.11 析構函數 104
3.5.12 課後練習 105
3.6 示例程序:Task類 108
3.6.1 問題 108
3.6.2 示例程序的輸齣 108
3.6.3 解決方案 109
3.6.4 類的實現 109
3.6.5 代碼分析 111
3.6.6 課後練習 113
3.7 類數據成員和類成員函數 113
3.7.1 類數據成員 113
3.7.2 類成員函數 115
3.7.3 在成員函數內定義static變量 116
3.7.4 課後練習 117
3.8 指嚮對象的指針 117
3.8.1 常量指針this 119
3.8.2 課後練習 120
3.9 常見編程錯誤 121
3.10 編程習題 126
第4章 繼承 131
4.1 引言 131
4.1.1 課後練習 132
4.2 基本概念和語法 132
4.2.1 繼承機製下的私有成員 133
4.2.2 改變訪問限製 134
4.2.3 名字隱藏 135
4.2.4 間接繼承 136
4.2.5 課後練習 137
4.3 示例程序:影片跟蹤管理 137
4.3.1 問題 137
4.3.2 示例程序的輸齣 138
4.3.3 解決方案 138
4.3.4 類的實現 139
4.3.5 代碼分析 140
4.3.6 程序設計建議 141
4.4 保護成員 141
4.4.1 課後練習 144
4.5 繼承機製下的構造函數與析構函數 145
4.5.1 繼承機製下的構造函數 145
4.5.2 派生類構造函數的規則 147
4.5.3 繼承機製下的析構函數 150
4.5.4 課後練習 152
4.6 示例程序:設計序列的類層次結構 153
4.6.1 問題 153
4.6.2 示例程序的輸入與輸齣 154
4.6.3 解決方案 157
4.6.4 類的實現 157
4.6.5 代碼分析 159
4.7 多繼承 161
4.7.1 繼承和訪問規則 162
4.7.2 虛基類 163
4.7.3 課後練習 164
4.8 補充材料 166
4.8.1 保護繼承 166
4.8.2 私有繼承 166
4.9 常見編程錯誤 167
4.10 編程習題 169
第5章 多態 172
5.1 C++中的運行期綁定與編譯期綁定 172
5.1.1 C++多態的前提條件 173
5.1.2 虛成員函數繼承 176
5.1.3 運行期綁定和虛成員函數錶 177
5.1.4 構造函數與析構函數 177
5.1.5 虛析構函數 178
5.1.6 對象成員函數和類成員函數 180
5.1.7 課後練習 180
5.2 示例程序:改進的影片跟蹤管理 182
5.2.1 問題 182
5.2.2 示例程序的輸入/輸齣 182
5.2.3 解決方案 184
5.2.4 類的實現 184
5.2.5 代碼分析 187
5.2.6 程序設計建議 189
5.2.7 課後練習 189
5.3 重載、覆蓋和遮蔽 189
5.3.1 重載 189
5.3.2 覆蓋 190
5.3.3 遮蔽 192
5.3.4 名字共享 193
5.3.5 課後練習 194
5.4 抽象基類 196
5.4.1 抽象基類和純虛成員函數 196
5.4.2 定義純虛成員函數的限製 198
5.4.3 抽象基類的使用 198
5.4.4 微軟的IUnknown接口 199
5.4.5 課後練習 199
5.5 運行期類型識彆 200
5.5.1 dynamic_cast操作符 200
5.5.2 dynamic_cast的規則 205
5.5.3 dynamic_cast與static_cast
小結 205
5.5.4 typeid操作符 205
5.5.5 擴展RTTI 206
5.5.6 課後練習 206
5.6 補充材料 208
5.6.1 強多態和弱多態 208
5.7 常見編程錯誤 208
5.8 編程習題 211
第6章 操作符重載 215
6.1 基本操作符重載 215
6.1.1 操作符的優先級和語法 217
6.1.2 課後練習 218
6.2 示例程序:復數類 219
6.2.1 問題 219
6.2.2 示例程序的輸齣 219
6.2.3 解決方案 219
6.2.4 類的實現 219
6.2.5 代碼分析 221
6.2.6 課後練習 222
6.3 用頂層函數進行操作符重載 223
6.3.1 課後練習 226
6.4 friend函數 227
6.4.1 課後練習 228
6.5 輸入與輸齣操作符的重載 229
6.5.1 課後練習 230
6.6 賦值操作符的重載 231
6.6.1 課後練習 233
6.7 特殊操作符的重載 234
6.7.1 下標操作符的重載 234
6.7.2 函數調用操作符的重載 237
6.7.3 自增與自減操作符的重載 239
6.7.4 轉型操作符 241
6.7.5 課後練習 243
6.8 示例程序:關聯式數組 244
6.8.1 問題 244
6.8.2 示例程序的輸入與輸齣 244
6.8.3 解決方案 245
6.8.4 類的實現 246
6.8.5 代碼分析 247
6.8.6 課後練習 248
6.9 內存管理操作符 248
6.9.1 課後練習 251
6.10 補充材料 252
6.10.1 friend類 252
6.11 常見編程錯誤 252
6.12 編程習題 255
第7章 模闆與標準模闆庫 257
7.1 模闆的基本知識 257
7.1.1 模闆實例 260
7.1.2 參數錶中的模闆類 261
7.1.3 模闆的函數式參數 262
7.1.4 課後練習 264
7.2 示例程序:模闆堆棧類 265
7.2.1 問題 265
7.2.2 示例程序的輸齣 265
7.2.3 解決方案 265
7.2.4 類的實現 266
7.2.5 代碼分析 268
7.2.6 程序設計建議 269
7.2.7 斷言 270
7.2.8 課後練習 271
7.3 標準模闆庫STL 271
7.3.1 容器、算法和迭代器 271
7.3.2 STL的優越性 271
7.3.3 容器基礎知識 273
7.3.4 基本序列式容器:vector、deque和list 273
7.3.5 vector、deque和list的效率比較 276
7.3.6 基本的關聯式容器:set、mult-
iset、map和multimap 276
7.3.7 容器適配器 278
7.3.8 其他容器 281
7.3.9 STL算法 284
7.3.10 其他STL構件 288
7.3.11 課後練習 289
7.4 示例程序:證券業績報錶 290
7.4.1 問題 290
7.4.2 示例程序的輸入與輸齣 290
7.4.3 解決方案 293
7.4.4 類的實現 293
7.4.5 代碼分析 296
7.5 附加材料 298
7.5.1 模闆類與繼承 298
7.6 常見編程錯誤 299
7.7 編程習題 300
第8章 C++輸入輸齣類層次 304
8.1 概況 304
8.1.1 輸入輸齣庫中的流類層次 304
8.1.2 輸入輸齣庫中的緩衝類層次 305
8.1.3 緩衝類層次與流類層次的關係 306
8.1.4 模闆的使用 307
8.1.5 課後練習 307
8.2 ios_base和basic_ios類 308
8.2.1 ios_base 308
8.2.2 basic_ios 312
8.2.3 例外處理 313
8.2.4 課後練習 314
8.3 高層輸入輸齣類 315
8.3.1 basic_istream 315
8.3.2 basic_ostream 319
8.3.3 basic_iostream 321
8.3.4 課後練習 321
8.4 操縱器 322
8.4.1 設計不帶參數的操縱器 322
8.4.2 設計帶參數的操縱器 324
8.4.3 課後練習 325
8.5 文件輸入輸齣類 325
8.5.1 basic_ofstream 325
8.5.2 basic_ifstream 327
8.5.3 basic_fstream 328
8.5.4 課後練習 329
8.6 示例程序:隨機存取文件類 329
8.6.1 問題 329
8.6.2 示例程序的輸入與輸齣 329
8.6.3 解決方案 330
8.6.4 類的實現 332
8.6.5 代碼分析 339
8.7 字符流輸入/輸齣類 344
8.7.1 basic_ostringstream 344
8.7.2 basic_istringstream 345
8.7.3 basic_stringstream 346
8.7.4 課後練習 347
8.8 示例程序:高層拷貝函數 347
8.8.1 問題 347
8.8.2 解決方案 347
8.8.3 類的實現 347
8.8.4 代碼分析 348
8.8.5 課後練習 349
8.9 緩衝區類 349
8.9.1 basic_streambuf 349
8.9.2 basic_filebuf 350
8.9.3 basic_stringbuf 355
8.9.4 課後練習 356
8.10 補充材料 356
8.11 常見編程錯誤 357
8.12 編程習題 358
第9章 MFC中的麵嚮對象編程 360
9.1 用MFC進行Windows程序設計 360
9.1.1 MFC編程的代碼生成器 361
9.1.2 課後練習 362
9.2 MFC中的文檔/視圖結構 362
9.2.1 文檔序列化 365
9.2.2 課後練習 366
9.3 示例程序:文檔序列化 366
9.3.1 問題 366
9.3.2 示例程序的輸齣 366
9.3.3 解決方案 367
9.3.4 類的實現 367
9.3.5 代碼分析 375
9.3.6 課後練習 378
9.4 COM 378
9.4.1 可更改的服務器和不可變更的接口 379
9.4.2 COM接口的層次 380
9.4.3 IDispatch接口 380
9.4.4 COM程序的類型 381
9.4.5 VC++對COM的支持 381
9.4.6 COM和OLE 382
9.4.7 課後練習 382
9.5 示例程序:自動化服務器與控製器 383
9.5.1 問題 383
9.5.2 示例程序的輸齣 383
9.5.3 解決方案 383
9.5.4 類的實現 384
9.5.5 代碼分析 391
9.5.6 引用計數問題 393
9.5.7 課後練習 393
9.6 補充材料 394
9.7 編程習題 394
附錄A ASCII錶 396
附錄B 用到的C++函數和成員函數 399
附錄C 奇數編號練習的提示及答案 428
· · · · · · (
收起)