本書主要內(nèi)容包括:程序的基本組成,分支程序設(shè)計,循環(huán)程序設(shè)計,批量數(shù)據(jù)處理——數(shù)組,過程封裝——函數(shù),間接訪問——指針,數(shù)據(jù)封裝——結(jié)構(gòu)體,模塊化開發(fā),創(chuàng)建新的類型,運算符重載,組合與繼承,泛型機制——模板,輸入輸出與文件,異常處理,容器與迭代器。
《C++程序設(shè)計——思想與方法(第3版)》一書是上海交通大學(xué)資深教學(xué)型老師的傾力之作,為解決讀者在學(xué)習(xí)程序設(shè)計時遇到的諸多問題,作者將多年的教學(xué)經(jīng)驗,以及程序設(shè)計的思想和方法總結(jié)在本書中,并將書中的重點、難度、案例操作錄制了教學(xué)視頻,讀者在學(xué)習(xí)過程中,可掃描二維碼打開視頻,暢想名師的講解。
第1章 緒論 1
1.1 程序設(shè)計概述 1
1.2 計算機組成 1
1.2.1 計算機硬件 2
1.2.2 計算機軟件 3
1.3 程序設(shè)計語言 3
1.3.1 機器語言 3
1.3.2 匯編語言 4
1.3.3 高級語言 4
1.3.4 C++語言 5
1.4 程序設(shè)計過程 5
1.4.1 算法設(shè)計 5
1.4.2 編碼 8
1.4.3 編譯和鏈接 8
1.4.4 調(diào)試與維護 8
1.5 小結(jié) 9
1.6 習(xí)題 9
第2章 程序的基本組成 11
2.1 程序的基本結(jié)構(gòu) 11
2.1.1 注釋 12
2.1.2 預(yù)編譯 12
2.1.3 名字空間 13
2.1.4 主程序 13
2.2 常量與變量 14
2.2.1 變量定義 14
2.2.2 數(shù)據(jù)類型 16
2.2.3 常量與符號常量 21
*2.2.4 C++11的擴展 24
2.3 數(shù)據(jù)的輸入/輸出 25
2.3.1 數(shù)據(jù)的輸入 25
2.3.2 數(shù)據(jù)的輸出 26
2.4 算術(shù)運算 27
2.4.1 算術(shù)表達式 27
2.4.2 各種類型的數(shù)值間的混合運算 27
2.4.3 強制類型轉(zhuǎn)換 27
2.4.4 數(shù)學(xué)函數(shù)庫 28
*2.4.5 C++11的擴展 29
2.5 賦值運算 29
2.5.1 賦值表達式 29
2.5.2 賦值的嵌套 30
2.5.3 復(fù)合賦值運算 31
2.5.4 自增和自減運算符 32
2.6 程序規(guī)范及常見錯誤 33
2.7 小結(jié) 34
2.8 習(xí)題 34
第3章 分支程序設(shè)計 37
3.1 關(guān)系表達式 37
3.2 邏輯表達式 38
3.3 if語句 39
3.3.1 if語句的格式 39
3.3.2 if語句的嵌套 43
3.3.3 條件表達式 44
3.4 switch語句及其應(yīng)用 46
3.5 編程規(guī)范及常見錯誤 52
3.6 小結(jié) 52
3.7 習(xí)題 53
第4章 循環(huán)程序設(shè)計 56
4.1 計數(shù)循環(huán) 56
4.1.1 for語句 56
4.1.2 for語句的進一步討論 61
4.1.3 for循環(huán)的嵌套 61
*4.1.4 C++11的擴展 62
4.2 break和continue語句 62
4.3 基于哨兵的循環(huán) 64
4.3.1 while語句 64
4.3.2 do-while語句 68
4.4 循環(huán)的中途退出 69
*4.5 枚舉法 70
*4.6 貪婪法 73
4.7 編程規(guī)范及常見錯誤 75
4.8 小結(jié) 75
4.9 習(xí)題 75
第5章 批量數(shù)據(jù)處理——數(shù)組 79
5.1 一維數(shù)組 79
5.1.1 一維數(shù)組的定義 79
5.1.2 一維數(shù)組元素的引用 80
5.1.3 一維數(shù)組的內(nèi)存映像 81
5.1.4 一維數(shù)組的應(yīng)用 81
*5.1.5 C++11的擴展 83
5.2 查找 84
5.2.1 順序查找 84
5.2.2 二分查找 85
5.3 排序 87
5.3.1 直接選擇排序法 87
5.3.2 冒泡排序法 89
5.4 二維數(shù)組 90
5.4.1 二維數(shù)組的定義 91
5.4.2 二維數(shù)組元素的引用 91
5.4.3 二維數(shù)組的內(nèi)存映像 92
5.4.4 二維數(shù)組的應(yīng)用 92
5.5 字符串 96
5.5.1 字符串的存儲及初始化 96
5.5.2 字符串的輸入/輸出 97
5.5.3 字符串處理函數(shù) 97
5.5.4 字符串的應(yīng)用 98
5.6 編程規(guī)范及常見錯誤 100
5.7 小結(jié) 101
5.8 習(xí)題 101
第6章 過程封裝——函數(shù) 104
6.1 函數(shù)定義 105
6.1.1 函數(shù)的基本結(jié)構(gòu) 105
6.1.2 return語句 105
6.1.3 函數(shù)示例 105
6.2 函數(shù)的使用 108
6.2.1 函數(shù)原型的聲明 108
6.2.2 函數(shù)調(diào)用 109
6.2.3 將函數(shù)與主程序放在一起 109
6.2.4 函數(shù)調(diào)用過程 110
6.3 變量的作用域 113
6.4 變量的存儲類別 115
6.4.1 自動變量 115
6.4.2 靜態(tài)變量 115
6.4.3 寄存器變量 117
6.4.4 外部變量 117
6.5 數(shù)組作為函數(shù)參數(shù) 119
6.6 帶默認值的函數(shù) 124
6.7 內(nèi)聯(lián)函數(shù) 125
6.8 重載函數(shù) 126
6.9 函數(shù)模板 128
6.10 遞歸函數(shù) 129
6.10.1 遞歸函數(shù)的基本概念 129
6.10.2 遞歸函數(shù)的應(yīng)用 131
*6.11 基于遞歸的算法 136
6.11.1 回溯法 136
6.11.2 分治法 140
6.11.3 動態(tài)規(guī)劃 143
*6.12 C++11的擴展 146
6.12.1 constexpr函數(shù) 146
6.12.2 尾置返回類型 146
6.13 編程規(guī)范及常見錯誤 147
6.14 小結(jié) 147
6.15 習(xí)題 148
第7章 間接訪問——指針 151
7.1 指針的概念 151
7.1.1 指針與間接訪問 151
7.1.2 指針變量的定義 151
7.1.3 指針的基本操作 152
*7.1.4 C++11的擴展 155
7.2 指針運算與數(shù)組 155
7.2.1 指針運算 155
7.2.2 用指針訪問數(shù)組 156
7.3 動態(tài)內(nèi)存分配 156
7.3.1 動態(tài)變量 156
7.3.2 動態(tài)變量的創(chuàng)建 157
7.3.3 動態(tài)變量的消亡 158
7.3.4 內(nèi)存泄漏 158
7.3.5 查找new操作的失誤 158
7.3.6 動態(tài)變量應(yīng)用 159
*7.3.7 C++11的擴展 160
7.4 字符串再討論 161
7.5 指針與函數(shù) 161
7.5.1 指針作為形式參數(shù) 161
7.5.2 數(shù)組作為函數(shù)參數(shù)再討論 164
7.5.3 字符串作為函數(shù)的參數(shù) 166
7.5.4 返回指針的函數(shù) 166
7.6 引用類型與函數(shù) 167
7.6.1 引用類型 167
7.6.2 引用傳遞 169
7.6.3 返回引用的函數(shù) 171
*7.6.4 C++11的擴展 171
7.7 指針數(shù)組與多級指針 172
7.7.1 指針數(shù)組 172
*7.7.2 main函數(shù)的參數(shù) 173
*7.7.3 多級指針 175
*7.7.4 動態(tài)二維數(shù)組 176
7.8 函數(shù)指針 177
7.8.1 指向函數(shù)的指針 177
7.8.2 函數(shù)指針作為函數(shù)參數(shù) 178
7.8.3 用于菜單選擇 180
*7.8.4 C++11的擴展 181
7.9 編程規(guī)范及常見錯誤 183
7.10 小結(jié) 183
7.11 習(xí)題 184
第8章 數(shù)據(jù)封裝——結(jié)構(gòu)體 186
8.1 記錄的概念 186
8.2 記錄的使用 187
8.2.1 結(jié)構(gòu)體類型的定義 187
8.2.2 結(jié)構(gòu)體類型的變量的定義 188
8.2.3 結(jié)構(gòu)體類型的變量的使用 189
8.3 結(jié)構(gòu)體作為函數(shù)的參數(shù) 190
8.4 鏈表 192
8.4.1 鏈表的概念 192
8.4.2 單鏈表的存儲 193
8.4.3 單鏈表的操作 193
8.5 編程規(guī)范及常見錯誤 198
8.6 小結(jié) 198
8.7 習(xí)題 198
第9章 模塊化開發(fā) 200
9.1 結(jié)構(gòu)化程序設(shè)計 200
9.2 自頂向下分解 200
9.2.1 頂層分解 201
9.2.2 prn_instruction的實現(xiàn) 201
9.2.3 play函數(shù)的實現(xiàn) 201
9.2.4 get_call_from_user的實現(xiàn) 202
9.3 模塊劃分 203
9.4 設(shè)計自己的庫 209
9.5 編程規(guī)范及常見錯誤 214
9.6 小結(jié) 214
9.7 習(xí)題 214
第10章 創(chuàng)建新的類型 216
10.1 面向?qū)ο蟪绦蛟O(shè)計 216
10.1.1 抽象的過程 216
10.1.2 面向?qū)ο蟪绦蛟O(shè)計的特點 217
10.1.3 庫和類 218
10.2 類的定義 224
10.3 對象的使用 228
10.3.1 對象的定義 228
10.3.2 對象的操作 228
10.3.3 this指針 230
10.4 對象的構(gòu)造與析構(gòu) 231
10.4.1 對象的構(gòu)造 231
10.4.2 對象的析構(gòu) 235
10.4.3 類與對象應(yīng)用實例 237
*10.4.4 C++11的擴展 240
10.5 const與類 242
10.5.1 常量數(shù)據(jù)成員 242
10.5.2 常量對象 243
10.5.3 常量成員函數(shù) 243
10.6 靜態(tài)成員 244
10.6.1 靜態(tài)數(shù)據(jù)成員 244
10.6.2 靜態(tài)成員函數(shù) 245
10.6.3 靜態(tài)常量成員 247
10.7 友元 248
10.8 編程規(guī)范及常見錯誤 250
10.9 小結(jié) 250
10.10 習(xí)題 251
第11章 運算符重載 254
11.1 運算符重載的意義 254
11.2 運算符重載的方法 255
11.3 5個特殊運算符的重載 259
11.3.1 賦值運算符的重載 259
11.3.2 下標運算符的重載 260
11.3.3 函數(shù)調(diào)用運算符的重載 261
11.3.4 ++和--運算符的重載 262
11.3.5 輸入/輸出運算符的重載 265
*11.3.6 C++11的擴展 267
11.4 自定義類型轉(zhuǎn)換函數(shù) 267
11.4.1 內(nèi)置類型到類類型的轉(zhuǎn)換 268
11.4.2 類類型到其他類型的轉(zhuǎn)換 268
*11.4.3 C++11的擴展 269
11.5 運算符重載的應(yīng)用 269
11.5.1 完整的Rational類的定義和使用 269
11.5.2 完整的DoubleArray類的定義和使用 272
11.6 編程規(guī)范及常見錯誤 275
11.7 小結(jié) 276
11.8 習(xí)題 276
第12章 組合與繼承 279
12.1 組合 279
12.2 繼承 284
12.2.1 派生類的定義 285
12.2.2 繼承的應(yīng)用 288
12.2.3 重定義基類的函數(shù) 292
12.2.4 派生類對象的賦值 293
12.2.5 派生類作為基類 294
12.3 運行時的多態(tài)性 295
12.3.1 將派生類對象隱式轉(zhuǎn)換為基類對象 295
12.3.2 多態(tài)性與虛函數(shù) 297
12.3.3 虛析構(gòu)函數(shù) 300
*12.3.4 C++11的擴展 300
12.4 純虛函數(shù)和抽象類 301
12.4.1 純虛函數(shù) 301
12.4.2 抽象類 301
12.5 編程規(guī)范及常見錯誤 302
12.6 小結(jié) 302
12.7 習(xí)題 302
第13章 泛型機制——模板 305
13.1 類模板的定義 305
13.2 類模板的實例化 307
13.3 模板的編譯 308
13.4 非類型參數(shù)和參數(shù)的默認值 308
13.5 類模板的友元 309
13.5.1 普通友元 309
13.5.2 模板的特定實例的友元 310
13.6 類模板作為基類 314
13.7 編程規(guī)范及常見錯誤 314
13.8 小結(jié) 315
13.9 習(xí)題 315
第14章 輸入/輸出與文件 316
14.1 流與標準庫 316
14.2 輸入/輸出緩沖 317
14.3 基于控制臺的輸入/輸出 318
14.3.1 輸出流 318
14.3.2 輸入流 320
14.3.3 格式化的輸入/輸出 323
14.4 基于文件的輸入/輸出 326
14.4.1 文件的概念 326
14.4.2 文件和流 327
14.4.3 文件的順序訪問 329
14.4.4 文件的隨機訪問 331
14.4.5 用流式文件處理含有記錄的文件 333
14.5 基于字符串的輸入/輸出 339
14.6 編程規(guī)范及常見錯誤 340
14.7 小結(jié) 340
14.8 習(xí)題 340
第15章 異常處理 343
15.1 傳統(tǒng)的異常處理方法 343
15.2 異常處理機制 343
15.2.1 異常拋出 344
15.2.2 異常捕獲 345
15.3 異常規(guī)格說明 350
15.4 編程規(guī)范及常見錯誤 351
15.5 小結(jié) 351
15.6 習(xí)題 351
第16章 容器和迭代器 353
16.1 容器 353
16.2 迭代器 353
16.3 容器和迭代器的設(shè)計示例 354
16.3.1 用數(shù)組實現(xiàn)的容器 354
16.3.2 用鏈表實現(xiàn)的容器 357
16.4 小結(jié) 359
16.5 習(xí)題 360
參考文獻 361