第 1章 用C++來解決問題1
1.1 解決問題 1
1.1.1 分析(提問、考察、研究) 1
1.1.2 設計(模型、思考、計劃、策劃、模式、綱要) 4
1.1.3 算法模式 5
1.1.4 算法設計示例 6
1.1.5 實現(xiàn)(完成、操作、使用) 7
1.1.6 一段C++程序 7
1.1.7 測試 8
1.2 對象、類型與變量 9
本章小結 11
練習題 12
解決問題:請編寫一個算法 12
第 2章 C++基礎 14
2.1 C++程序的組成部分 14
2.1.1 標記:一個程序的最小零件 16
2.1.2 特殊符號 17
2.1.3 標識符 17
2.1.4 關鍵字 18
2.1.5 注釋 18
2.1.6 C++字面常量 19
2.2 語句 21
2.2.1 cout輸出語句 22
2.2.2 賦值與類型轉換 22
2.2.3 cin輸入語句 24
2.3 算術表達式 25
2.3.1 整數(shù)算術運算 27
2.3.2 整數(shù)與浮點數(shù)的混合運算 28
2.3.3 const對象 29
2.4 先提示再輸入 30
2.5 程序實現(xiàn)中的錯誤與警告 32
2.5.1 在編譯時被檢測到的錯誤與警告 33
2.5.2 編譯時的警告信息 35
2.5.3 連接時錯誤 36
2.5.4 運行時錯誤 37
2.5.5 意向性錯誤 37
2.5.6 當軟件的設計與問題說明不相符時 38
本章小結 39
練習題 40
編程技巧 43
編程項目 44
第3章 自由函數(shù)的運用 48
3.1 cmath函數(shù) 48
3.2 使用cmath函數(shù)解決問題 50
3.2.1 分析 50
3.2.2 設計 50
3.2.3 實現(xiàn) 52
3.3 調用已被文檔化的函數(shù) 53
3.3.1 前置條件與后置條件 53
3.3.2 函數(shù)頭信息 54
3.3.3 實參與形參的關聯(lián) 56
3.3.4 面向int、char和bool這些類型的一些函數(shù) 58
本章小結 61
練習題 61
編程技巧 63
編程項目 63
第4章 自由函數(shù)的實現(xiàn) 66
4.1 實現(xiàn)屬于自己的函數(shù) 66
4.1.1 測試驅動器 69
4.1.2 只有一條返回語句的函數(shù) 70
4.2 分析、設計與實現(xiàn) 71
4.2.1 分析 71
4.2.2 設計 72
4.2.3 實現(xiàn) 72
4.2.4 測試 74
4.2.5 標識符的域 74
4.2.6 函數(shù)名的域 76
4.2.7 全局標識符 76
4.3 void函數(shù)與引用型形參 77
4.4 const的引用型形參 80
本章小結 82
練習題 83
編程技巧 84
編程項目 85
第5章 發(fā)送消息 89
5.1 為真實世界建模 89
5.1.1 BankAccount對象 90
5.1.2 類與對象的圖解 92
5.2 發(fā)送消息 93
5.3 string對象 95
5.3.1 訪問性方法 95
5.3.2 修改性方法 96
5.3.3 為string對象本身定義的操作符 97
5.4 ostream和istream的成員函數(shù) 99
5.5 另一個非標準類:Grid 103
5.5.1 Grid對象的其他操作 105
5.5.2 不滿足前置條件的情況 108
5.5.3 即使函數(shù)沒有任何實參也必須用()來調用 109
5.6 類和函數(shù)為何而存在 109
本章小結 111
練習題 112
編程技巧 114
編程項目 116
第6章 成員函數(shù)的實現(xiàn) 120
6.1 在頭文件中定義類 120
6.2 實現(xiàn)類的成員函數(shù) 124
6.2.1 實現(xiàn)構造函數(shù) 124
6.2.2 實現(xiàn)修改型的類成員函數(shù) 125
6.2.3 實現(xiàn)訪問型的成員函數(shù) 126
6.3 默認構造函數(shù) 129
6.4 狀態(tài)型對象模式 131
6.4.1 構造函數(shù) 131
6.4.2 修改型函數(shù) 131
6.4.3 訪問型函數(shù) 132
6.4.4 命名約定 132
6.4.5 public還是private 133
6.4.6 將接口從實現(xiàn)中分離 133
6.5 面向對象設計準則 135
6.5.1 類的內聚力 136
6.5.2 為什么const只用來修飾訪問型函數(shù),卻不用于修改型函數(shù) 136
本章小結 139
練習題 140
編程技巧 141
編程項目 143
第7章 選擇操作 149
7.1 實現(xiàn)選擇控制 149
7.1.1 保護性動作模式 150
7.1.2 if語句 150
7.2 關系運算符 152
7.3 替代性動作模式 153
7.4 選擇操作結構中的語句塊 157
7.5 bool對象 158
7.5.1 布爾運算 160
7.5.2 運算符優(yōu)先規(guī)則 160
7.5.3 布爾運算符||與grid對象 161
7.5.4 短路式布爾評估 163
7.6 bool成員函數(shù) 164
7.7 多重選擇操作 166
7.7.1 另一個示例:字母等級評定 168
7.7.2 多路返回 169
7.8 測試多重選擇操作 170
7.9 assert函數(shù) 171
7.10 switch語句 173
本章小結 177
練習題 177
編程技巧 180
編程項目 181
第8章 重復操作 188
8.1 實現(xiàn)重復控制 188
8.2 算法模式:確定性循環(huán) 189
8.2.1 for語句 191
8.2.2 賦值操作符與其他增量運算的結合 192
8.2.3 對Grid對象使用確定性循環(huán) 194
8.3 確定性循環(huán)模式的應用 196
8.3.1 分析 196
8.3.2 設計 197
8.3.3 實現(xiàn) 198
8.3.4 測試 199
8.3.5 檢測到錯誤時應該怎么做 200
8.4 算法模式:不確定性循環(huán) 201
8.4.1 使用while語句實現(xiàn)確定性循環(huán)模式 202
8.4.2 對Grid對象使用不確定性循環(huán) 203
8.4.3 設置了崗哨的不確定性循環(huán) 204
8.4.4 用cin >>來充當循環(huán)測試 204
8.4.5 無限循環(huán) 206
8.5 do while語句 208
8.6 循環(huán)的選擇與設計 210
8.6.1 確定要使用的循環(huán)類型 210
8.6.2 確定循環(huán)測試部分 211
8.6.3 編寫要重復執(zhí)行的語句 211
8.6.4 確保循環(huán)會越來越接近終止條件 211
8.6.5 在必要情況下做好相關對象的初始化操作 211
本章小結 212
練習題 213
編程技巧 216
編程項目 218
第9章 文件流 224
9.1 ifstream對象 224
9.2 將確定性循環(huán)模式應用于磁盤文件 227
9.2.1 讓處理過程終止于文件結束符 227
9.2.2 讓用戶選擇文件名 229
9.3 使用不確定性循環(huán)處理更復雜的磁盤文件輸入 229
9.3.1 數(shù)字與字符串的混合 231
9.3.2 getline函數(shù) 231
9.4 ofstream對象 234
本章小結 234
練習題 235
編程技巧 235
編程項目 236
第 10章 vector 238
10.1 C++標準庫中的vector類 238
10.1.1 訪問集合中的個別元素 239
10.1.2 用確定的for循環(huán)來處理vector 240
10.1.3 處理vector中的前n個元素 241
10.1.4 檢查下標出界 242
10.1.5 vector::capacity、vector::resize與操作符= 243
10.2 順序搜索 245
10.3 發(fā)送消息給vector中的各對象 247
10.4 vector的實參 形參關聯(lián) 251
10.5 排序 253
10.6 二分搜索法 258
本章小結 262
練習題 262
編程技巧 267
編程項目 270
第 11章 泛型容器 278
11.1 容器類 278
11.1.1 傳遞類型實參 279
11.1.2 模板 279
11.2 Set類 282
11.2.1 構造函數(shù)Set() 283
11.2.2 bool contains(Type const&value) const 283
11.2.3 void insert(Type const&element) 284
11.2.4 bool remove(Type const&removalCandidate) 284
11.3 迭代器模式 285
本章小結 287
練習題 288
編程技巧 288
編程項目 290
第 12章 指針與內存管理 294
12.1 內存因素考量 294
12.1.1 指針 295
12.1.2 指向對象 300
12.2 原生的C數(shù)組 302
12.2.1 原生數(shù)組與vector之間的差異 303
12.2.2 數(shù)組與指針的聯(lián)系 303
12.2.3 傳遞原生數(shù)組實參 304
12.3 用new操作符分配內存 305
12.4 delete操作符 309
12.5 用C的struct構建單向鏈接結構體 310
12.5.1 用單向鏈接數(shù)據(jù)結構實現(xiàn)list類 312
12.5.2 add(std::string) 313
12.5.3 get(int index) 314
12.5.4 remove(stringremovalCandidate) 314
本章小結 316
練習題 317
編程技巧 318
編程項目 319
第 13章 存儲vector的vector 324
13.1 存儲vector的vector 324
13.2 Matrix類 325
13.2.1 標量乘法 328
13.2.2 矩陣加法 328
13.3 原生的二維數(shù)組 330
13.4 擁有兩個以上下標的數(shù)組 331
本章小結 333
練習題 333
編程技巧 336
編程項目 336
附錄 自測題答案 342