第1章 概 論 1
1.1 認識C 1
1.2 C 的發(fā)展 1
1.3 C與C 的區(qū)別 2
1.4 面向對象編程OOP 3
1.5 C 和泛型編程 4
1.6 C 的應用 5
1.7 C 的優(yōu)缺點 5
第2章 C 新特性 7
2.1 C 入門程序分析 7
2.1.1 C 預處理器與iostream文件 7
2.1.2 頭文件 8
2.1.3 名稱空間 8
2.1.4 輸入/輸出流對象 10
2.1.5 控制符endl 16
2.2 C 變量的新用法 17
2.2.1 C 中的基本數據類型 17
2.2.2 變量聲明 18
2.2.3 作用域 18
2.2.4 使用方式 19
2.3 C 的新增特性 20
2.3.1 輸入/輸出流 20
2.3.2 認識引用 21
2.3.3 const 26
2.3.4 函數的默認參數 27
2.3.5 初用內聯(lián)函數 28
2.3.6 函數重載實踐 29
2.3.7 強制類型轉換 33
2.3.8 簡述string類型 34
2.3.9 new和delete的應用 35
2.3.10 巧用bool類型 37
第3章 類和對象 39
3.1 面向對象的思想 39
3.1.1 面向對象的基礎思想 39
3.1.2 類的概念 40
3.1.3 C 的四大特性 40
3.1.4 面向對象軟件的開發(fā)步驟 41
3.2 類的認知 42
3.2.1 特 性 42
3.2.2 由 來 42
3.2.3 聲明方式 44
3.2.4 定義與使用 46
3.2.5 實例: 設計學生類 47
3.3 成員訪問權限 48
3.3.1 權限的理解 48
3.3.2 權限的使用 49
3.3.3 公有和私有的應用 50
3.4 對 象 52
3.4.1 對象的定義 52
3.4.2 類與對象的區(qū)別 53
3.4.3 對象與成員的關系 54
3.4.4 對象的作用域、可見域和生存周期 54
3.4.5 學生類對象使用演示 55
3.5 探索成員函數 55
3.5.1 定義位置 55
3.5.2 分 類 56
3.5.3 普通成員函數 56
3.5.4 基礎分類 59
3.5.5 命 名 60
3.5.6 實踐: 設計圓類 60
3.6 this指針 62
3.6.1 了解this指針 63
3.6.2 使用要點 64
3.7 特殊成員函數之普通構造函數 65
3.7.1 引入構造函數 65
3.7.2 普通構造函數的格式 65
3.7.3 作 用 66
3.7.4 使用技巧 67
3.7.5 特 性 68
3.7.6 注意事項 70
3.7.7 默認構造函數 71
3.7.8 數據成員初始化方案 73
3.8 特殊成員函數之析構函數 76
3.8.1 定 義 76
3.8.2 顯式調用析構函數 78
3.8.3 使用技巧 79
3.9 特殊成員函數之復制構造函數 82
3.9.1 格 式 82
3.9.2 說 明 82
3.9.3 默認復制構造函數的弊端 84
3.9.4 對比構造函數 86
3.9.5 臨時對象的創(chuàng)建 87
3.9.6 特殊成員函數大實踐 89
第4章 類的特殊成員 92
4.1 特殊數據成員初始化方案 92
4.1.1 只讀成員 92
4.1.2 引用成員 95
4.1.3 類對象成員 97
4.1.4 靜態(tài)成員 102
4.2 特殊成員函數 103
4.2.1 const成員函數的使用方法 104
4.2.2 靜態(tài)成員函數的使用方法 106
4.3 對象的組織 108
4.3.1 const對象及引用 108
4.3.2 指向對象的指針 109
4.3.3 對象的大小 110
4.3.4 再談this指針 111
4.3.5 對象數組 112
4.3.6 對象鏈表 113
4.3.7 指針管理對象 114
4.4 小 結 115
第5章 類域和友元函數 116
5.1 類中各種作用域 116
5.1.1 淺談作用域 116
5.1.2 作用域分類 116
5.2. 類 域 118
5.2.1 作用域與可見域 119
5.2.2 類名的覆蓋 121
5.2.3 作用域的綜合應用 122
5.3 對象的生存期、作用域和可見域 123
5.3.1 實例化規(guī)則 123
5.3.2 內存釋放 125
5.3.3 delete與free的對比 126
5.4 友元函數 127
5.4.1 了解友元 127
5.4.2 非成員函數的實現 127
5.4.3 成員函數的實現 129
5.4.4 友元的重載 130
5.4.5 友元類的使用技巧 132
5.4.6 友元的注意事項 134
5.4.7 實踐: 友元管理學生信息 134
5.5 小 結 136
第6章 運算符重載、類型轉換和重載函數選擇規(guī)則 137
6.1 運算符重載 137
6.1.1 運算符重載介紹 137
6.1.2 運算符重載規(guī)則 138
6.1.3 運算符重載技巧 139
6.1.4 運算符典型重載實戰(zhàn) 148
6.1.5 運算符重載小結 158
6.2 類型轉換 159
6.2.1 理 解 159
6.2.2 C 中的類型轉換 160
6.2.3 實踐: 類與基本類型之間的轉換 160
6.3 重載函數選擇規(guī)則 162
6.4 小 結 163
第7章 繼 承 164
7.1 繼承的步驟 164
7.2 派生類的定義 165
7.2.1 格 式 165
7.2.2 對比派生方式 167
7.3 多基派生 169
7.3.1 使用方式 169
7.3.2 二義性問題 170
7.3.3 實踐: 二義性問題解決方案 171
7.4 共同基類 172
7.4.1 共同基類的二義性 172
7.4.2 二義性問題的解決方案 173
7.4.3 實踐: 測試虛基類 174
7.4.4 不同二義性的對比 175
7.5 派生類的構造函數和析構函數 176
7.5.1 單基派生類的構造函數 176
7.5.2 單基派生類的析構函數 178
7.5.3 多基派生類的構造函數和析構函數 179
7.5.4 虛基派生的構造函數和析構函數 181
7.6 繼承與組合 183
7.6.1 繼承不是萬金油 184
7.6.2 實踐: 組合實現五官類 184
7.7 繼承間的相互轉換 185
7.7.1 單基繼承的類型適應 186
7.7.2 多基繼承的類型適應 188
7.7.3 共同基類的類型適應 190
7.7.4 基類的類型適應 191
7.8 小 結 192
第8章 多 態(tài) 193
8.1 重載與多態(tài)的區(qū)分 193
8.2 多態(tài)的分類 194
8.2.1 類的多態(tài) 194
8.2.2 對象層次的多態(tài) 194
8.3 多態(tài)與虛函數 196
8.3.1 靜態(tài)聯(lián)編原則 196
8.3.2 動態(tài)聯(lián)編原則 197
8.4 虛函數 200
8.4.1 聲明與定義 200
8.4.2 工作原理 201
8.4.3 用 法 202
8.4.4 虛函數小結 202
8.4.5 實踐: 虛函數辨別人員身份 202
8.5 不同方式訪問虛函數 204
8.5.1 對象名訪問 204
8.5.2 指針訪問 206
8.5.3 引用訪問 207
8.5.4 類內訪問 208
8.5.5 在特殊成員函數中訪問 209
8.6 虛函數表工作原理 211
8.7 純虛函數與抽象類 212
8.7.1 純虛函數的聲明和定義 212
8.7.2 實踐: 抽象類設計圖形類 213
8.7.3 實踐: 單件設計模式 216
8.7.4 實踐: 虛析構函數 217
8.8 虛函數引入的二義性 220
8.8.1 多基派生二義性消除技巧 220
8.8.2 共同基類和虛繼承的對比 222
8.9 重載、覆蓋和隱藏 224
8.9.1 重載應用場景 224
8.9.2 覆蓋應用場景 225
8.9.3 隱藏應用場景 226
8.10 小 結 227
第9章 string類 228
9.1 string類概述 228
9.1.1 對象的使用 228
9.1.2 對象構造實戰(zhàn) 229
9.2 字符串的轉換方案 230
9.2.1 利用c_str() 230
9.2.2 利用data() 231
9.2.3 利用copy() 231
9.3 string類字符串的輸入/輸出 232
9.4 string類字符串的賦值與清空 233
9.4.1 賦 值 233
9.4.2 清 空 234
9.5 string類字符串對象的元素操作 235
9.5.1 添加(追加) 235
9.5.2 插 入 236
9.5.3 刪 除 237
9.5.4 存 取 238
9.5.5 查 找 239
9.5.6 大 小 242
9.6 string類字符串的比較和提取 243
9.6.1 比 較 243
9.6.2 提 取 244
第10章 模 板 246
10.1 模板概述 246
10.2 函數模板 247
10.2.1 函數模板的定義 247
10.2.2 函數模板的使用 249
10.2.3 實踐: 隱式實例化 249
10.2.4 實踐: 顯式實例化 250
10.2.5 實踐: 特化 251
10.2.6 重載的原則 253
10.2.7 優(yōu)先級與執(zhí)行順序 254
10.2.8 實踐: 函數模板實現計算 255
10.3 類模板 255
10.3.1 類模板的定義 256
10.3.2 隱式實例化 259
10.3.3 顯式示例化 260
10.3.4 實踐: 顯式特化 260
10.3.5 實踐: 部分特化 261
10.3.6 重載和優(yōu)先級 264
10.4 模板的嵌套 264
10.4.1 實踐: 函數成員模板 264
10.4.2 實踐: 對象成員模板 265
10.4.3 實踐: 模板作參數 267
10.5 小 結 268
第11章 異 常 269
11.1 實踐: 調用abort()函數 269
11.2 實踐: 返回錯誤代碼 271
11.3 實踐: 異常機制 272
11.4 將對象用作異常類型 276
11.5 異常、類和繼承 282
11.6 注意事項 288
11.7 小 結 289
第12章 輸入/輸出流和文件接口 291
12.1 面對對象的標準庫 291
12.1.1 淺談標準庫 292
12.1.2 國際字符的支持 293
12.1.3 I/O對象不可復制或賦值 294
12.2 條件狀態(tài) 294
12.2.1 條件狀態(tài)認知 294
12.2.2 條件狀態(tài)成員 295
12.2.3 流狀態(tài)的查詢和控制 296
12.2.4 條件狀態(tài)的訪問 297
12.2.5 多種狀態(tài)的處理 297
12.3 管理輸出緩沖 297
12.3.1 輸出緩沖區(qū)的刷新 298
12.3.2 unitbuf操作符 298
12.3.3 輸入和輸出綁定 299
12.4 文件輸入/輸出 299
12.4.1 簡單的文件I/O 300
12.4.2 文件概述 300
12.4.3 實踐: 文件的輸入/輸出(C) 301
12.4.4 實踐: 二進制文件的讀/寫 305
12.4.5 實踐: 文件的定位 306
12.4.6 實踐: 文件的輸入/輸出流 (C ) 307
12.5 string流 312
12.5.1 stringstream對象的使用 313
12.5.2 stringstream提供的轉換和/或格式化 313
12.6 小 結 314
第13章 容 器 316
13.1 容器概述 316
13.2 淺談STL容器和迭代器的原理 320
13.2.1 STL容器的原理 320
13.2.2 STL迭代器的原理 320
13.3 序列式容器 322
13.3.1 實踐: 容器的創(chuàng)建和元素的訪問 323
13.3.2 所有容器的基本特征 325
13.3.3 實踐: 容器中元素的插入和刪除 325
13.3.4 淺談容器 330
13.4 關聯(lián)式容器 331
13.4.1 實踐: multiset容器 332
13.4.2 實踐: map容器 333
13.4.3 實踐: multimap容器 334
13.5 堆棧容器 335
13.5.1 queue(隊列) 和 stack(棧) 335
13.5.2 堆棧容器相關函數 336
第14章 STL泛型算法 339
14.1 算法概述 339
14.2 容器相關算法 340
14.2.1 初窺算法 340
14.2.2 只讀算法 341
14.3 有關容器算法的應用 343
14.3.1 寫容器元素算法的應用 343
14.3.2 巧用容器元素重新排序的算法 345
14.4 迭代器 349
14.4.1 插入迭代器 349
14.4.2 iostream迭代器 350
14.4.3 流迭代器的定義 351
14.4.4 反向迭代器 355
14.4.5 const迭代器 357
14.4.6 五種迭代器 357
14.5 泛型算法的結構 359
14.5.1 算法的形參模式 359
14.5.2 算法的命名規(guī)范 360
14.6 容器特有的算法 361
14.7 小 結 363
第15章 簡述STL算法 364
15.1 查找對象的算法 364
15.1.1 簡單查找算法 364
15.1.2 查找許多值中的一個的算法 365
15.1.3 查找子序列的算法 365
15.2 其他只讀算法 366
15.3 二分查找算法 367
15.4 寫容器元素的算法 367
15.4.1 只寫元素不讀元素的算法 368
15.4.2 使用輸入迭代器寫元素的算法 368
15.4.3 使用前向迭代器寫元素的算法 368
15.4.4 使用雙向迭代器寫元素的算法 369
15.5 劃分與排序算法 369
15.5.1 劃分算法 370
15.5.2 排序算法 370
15.6 通用程序排序操作 371
15.6.1 使用前向迭代器的重新排序算法 371
15.6.2 使用雙向迭代器的重新排序算法 372
15.6.3 寫至輸出迭代器的重新排序算法 372
15.6.4 使用隨機訪問迭代器的重新排序算法 373
15.7 排序算法 373
15.8 有序序列的集合算法 374
15.9 最大值和最小值 374
15.10 算術算法 375
附錄A VS2019安裝教程 377
A.1 安裝.net framework 377
A.2 VS2019的安裝與配置 379
A.3 新建C/C 項目 388
附錄B VS2019代碼調試 399
附錄C EasyX庫 404
C.1 基本說明 404
C.2 繪圖語句 404
C.2.1 常用的繪圖語句 404
C.2.2 設置顏色 405
C.2.3 延時函數 406
C.3 結合流程控制語句來繪圖 407
C.4 數學知識在繪圖中的運用 412
C.5 實現簡單動畫 413
C.6 位運算和繪圖的關系 414
C.6.1 位運算的運算法則 414
C.6.2 位運算的應用 415
附錄D C 常見錯誤分析 419
參考文獻