內容簡介
《C++程式設計:原理與實踐(原書第2版)》將經典程式設計思想與C++開發實踐完美結合,全面地介紹了程式設計基本原理,包括基本概念、設計和編程技術、語言特性以及標準庫等,教你學會如何編寫具有輸入、輸出、計算以及簡單圖形顯示等功能的程式。此外,本書通過對C++思想和歷史的討論、對經典實例(如矩陣運算、文本處理、測試以及嵌入式系統程式設計)的展示,以及對C語言的簡單描述,為你呈現了一幅程式設計的全景圖。
為方便讀者循序漸進地學習,加上篇幅所限,《C++程式設計:原理與實踐(原書第2版)》分為基礎篇和進階篇兩冊出版,基礎篇包括第1~11章、第17~19章和附錄A、C,進階篇包括第12~16章、第20~27章和附錄B、D、E。本書是基礎篇。
圖書目錄
第1章 計算機、人與程式設計 1
1.1 簡介 1
1.2 軟體 1
1.3 人 3
1.4 計算機科學 5
1.5 計算機已無處不在 6
1.5.1 有螢幕和無螢幕 6
1.5.2 船舶 6
1.5.3 電信 7
1.5.4 醫療 9
1.5.5 信息領域 10
1.5.6 一種垂直的視角 11
1.5.7 與C++程式設計有何聯繫 12
1.6 程式設計師的理想境界 12
思考題 14
術語 15
習題 15
附言 16
第2章 Hello, World! 17
2.1 程式 17
2.2 經典的第一個程式 17
2.3 編譯 20
2.4 連結 22
2.5 編程環境 22
簡單練習 23
思考題 24
術語 25
習題 25
附言 26
第3章 對象、類型和值 27
3.1 輸入 27
3.2 變數 28
3.3 輸入和類型 29
3.4 運算和運算符 31
3.5 賦值和初始化 33
3.5.1 實例:檢測重複單詞 34
3.6 複合賦值運算符 36
3.6.1 實例:重複單詞計數 36
3.7 命名 37
3.8 類型和對象 39
3.9 類型安全 40
3.9.1 安全轉換 40
3.9.2 不安全轉換 41
簡單練習 43
思考題 44
術語 45
習題 45
附言 46
第4章 計算 47
4.1 簡介 47
4.2 目標和工具 48
4.3 表達式 50
4.3.1 常量表達式 51
4.3.2 運算符 52
4.3.3 類型轉換 53
4.4 語句 54
4.4.1 選擇語句 55
4.4.2 循環語句 59
4.5 函式 62
4.5.1 為什麼使用函式 64
4.5.2 函式聲明 65
4.6 vector 65
4.6.1 遍歷一個vector 66
4.6.2 vector空間增長 67
4.6.3 一個數值計算實例 67
4.6.4 一個文本實例 69
4.7 語言特性 70
簡單練習 71
思考題 71
術語 72
習題 72
附言 74
第5章 錯誤 75
5.1 簡介 75
5.2 錯誤的來源 76
5.3 編譯時錯誤 77
5.3.1 語法錯誤 77
5.3.2 類型錯誤 78
5.3.3 警告 78
5.4 連結時錯誤 79
5.5 運行時錯誤 79
5.5.1 調用者處理錯誤 80
5.5.2 被調用者處理錯誤 81
5.5.3 報告錯誤 82
5.6 異常 83
5.6.1 參數錯誤 84
5.6.2 範圍錯誤 85
5.6.3 輸入錯誤 86
5.6.4 窄化錯誤 88
5.7 邏輯錯誤 89
5.8 估計 91
5.9 調試 92
5.9.1 實用調試建議 93
5.10 前置條件和後置條件 95
5.10.1 後置條件 97
5.11 測試 98
簡單練習 98
思考題 99
術語 100
習題 100
附言 102
第6章 編寫一個程式 103
6.1 一個問題 103
6.2 對問題的思考 103
6.2.1 程式設計的幾個階段 104
6.2.2 策略 104
6.3 回到計算器問題 106
6.3.1 第一步嘗試 106
6.3.2 單詞 108
6.3.3 實現單詞 109
6.3.4 使用單詞 110
6.3.5 重新開始 111
6.4 文法 112
6.4.1 英文文法 116
6.4.2 設計一個文法 117
6.5 將文法轉換為程式 117
6.5.1 實現文法規則 118
6.5.2 表達式 118
6.5.3 項 121
6.5.4 基本表達式 123
6.6 試驗第一個版本 123
6.7 試驗第二個版本 126
6.8 單詞流 128
6.8.1 實現Token_stream 129
6.8.2 讀單詞 130
6.8.3 讀數值 131
6.9 程式結構 131
簡單練習 133
思考題 133
術語 134
習題 134
附言 135
第7章 完成一個程式 136
7.1 簡介 136
7.2 輸入和輸出 136
7.3 錯誤處理 138
7.4 處理負數 141
7.5 模運算% 142
7.6 清理代碼 143
7.6.1 符號常量 143
7.6.2 使用函式 145
7.6.3 代碼布局 145
7.6.4 注釋 146
7.7 錯誤恢復 148
7.8 變數 150
7.8.1 變數和定義 150
7.8.2 引入name單詞 154
7.8.3 預定義名字 156
7.8.4 我們到達目的地了嗎 156
簡單練習 157
思考題 157
術語 158
習題 158
附言 159
第8章 函式相關的技術細節 160
8.1 技術細節 160
8.2 聲明和定義 161
8.2.1 聲明的類別 164
8.2.2 變數和常量聲明 164
8.2.3 默認初始化 165
8.3 頭檔案 165
8.4 作用域 167
8.5 函式調用和返回 171
8.5.1 聲明參數和返回類型 171
8.5.2 返回一個值 172
8.5.3 傳值 173
8.5.4 傳常量引用 174
8.5.5 傳引用 176
8.5.6 傳值與傳引用的對比 178
8.5.7 參數檢查和轉換 179
8.5.8 實現函式調用 180
8.5.9 constexpr函式 183
8.6 計算順序 184
8.6.1 表達式計算 185
8.6.2 全局初始化 186
8.7 名字空間 187
8.7.1 using聲明和using指令 188
簡單練習 189
思考題 190
術語 191
習題 191
附言 192
第9章 類相關的技術細節 193
9.1 用戶自定義類型 193
9.2 類和成員 194
9.3 接口和實現 194
9.4 演化一個類 196
9.4.1 結構和函式 196
9.4.2 成員函式和構造函式 197
9.4.3 保持細節私有性 199
9.4.4 定義成員函式 200
9.4.5 引用當前對象 202
9.4.6 報告錯誤 202
9.5 枚舉類型 203
9.5.1 “平坦”枚舉 205
9.6 運算符重載 205
9.7 類接口 206
9.7.1 參數類型 207
9.7.2 拷貝 209
9.7.3 默認構造函式 209
9.7.4 const成員函式 212
9.7.5 類成員和“輔助函式” 213
9.8 Date類 214
簡單練習 217
思考題 218
術語 218
習題 218
附言 220
第10章 輸入輸出流 221
10.1 輸入和輸出 221
10.2 I/O流模型 222
10.3 檔案 223
10.4 打開檔案 224
10.5 讀寫檔案 226
10.6 I/O錯誤處理 227
10.7 讀取單個值 229
10.7.1 將程式分解為易管理的子模組 231
10.7.2 將人機對話從函式中分離 233
10.8 用戶自定義輸出運算符 234
10.9 用戶自定義輸入運算符 235
10.10 一個標準的輸入循環 235
10.11 讀取結構化的檔案 236
10.11.1 在記憶體中的表示 237
10.11.2 讀取結構化的值 238
10.11.3 改變表示方法 241
練習 242
思考題 243
術語 243
習題 243
附言 244
第11章 定製輸入輸出 245
11.1 有規律的與無規律的輸入和輸出 245
11.2 格式化輸出 245
11.2.1 輸出整數 246
11.2.2 輸入整數 247
11.2.3 輸出浮點數 248
11.2.4 精度 249
11.2.5 域 250
11.3 打開和定位檔案 250
11.3.1 檔案打開模式 251
11.3.2 二進制檔案 252
11.3.3 在檔案中定位 254
11.4 字元串流 254
11.5 面向行的輸入 255
11.6 字元分類 256
11.7 使用非標準分隔設定 258
11.8 更多未討論內容 263
簡單練習 263
思考題 264
術語 264
習題 265
附言 266
第12章 向量和自由空間 267
12.1 簡介 267
12.2 vector的基本知識 268
12.3 記憶體、地址和指針 269
12.3.1 sizeof運算符 271
12.4 自由空間和指針 272
12.4.1 自由空間分配 273
12.4.2 通過指針訪問數據 274
12.4.3 指針範圍 274
12.4.4 初始化 276
12.4.5 空指針 277
12.4.6 自由空間釋放 277
12.5 析構函式 279
12.5.1 生成的析構函式 280
12.5.2 析構函式和自由空間 281
12.6 訪問元素 282
12.7 指向類對象的指針 283
12.8 類型混用:void*和類型轉換 284
12.9 指針和引用 285
12.9.1 指針參數和引用參數 286
12.9.2 指針、引用和繼承 287
12.9.3 實例:鍊表 287
12.9.4 鍊表操作 289
12.9.5 鍊表的使用 290
12.10 this指針 291
12.10.1 關於鍊表使用的更多討論 293
簡單練習 294
思考題 294
術語 295
習題 295
附言 296
第13章 向量和數組 297
13.1 簡介 297
13.2 初始化 298
13.3 拷貝 299
13.3.1 拷貝構造函式 300
13.3.2 拷貝賦值 301
13.3.3 拷貝術語 303
13.3.4 移動 304
13.4 必要的操作 305
13.4.1 顯式構造函式 307
13.4.2 調試構造函式和析構函式 308
13.5 訪問vector元素 309
13.5.1 對const向量重載運算符 311
13.6 數組 311
13.6.1 指向數組元素的指針 312
13.6.2 指針和數組 314
13.6.3 數組初始化 316
13.6.4 指針問題 316
13.7 實例:回文 319
13.7.1 使用string實現回文 319
13.7.2 使用數組實現回文 320
13.7.3 使用指針實現回文 321
簡單練習 321
思考題 322
術語 323
習題 323
附言 324
第14章 向量、模板和異常 325
14.1 問題 325
14.2 改變大小 327
14.2.1 表示方式 327
14.2.2 reserve和capacity 328
14.2.3 resize 329
14.2.4 push_back 329
14.2.5 賦值 330
14.2.6 到目前為止的vector類 331
14.3 模板 332
14.3.1 類型作為模板參數 333
14.3.2 泛型編程 335
14.3.3 概念 336
14.3.4 容器和繼承 338
14.3.5 整數作為模板參數 338
14.3.6 模板實參推斷 340
14.3.7 泛化vector 340
14.4 範圍檢查和異常 342
14.4.1 旁白:設計上的考慮 343
14.4.2 坦白:使用宏 344
14.5 資源和異常 345
14.5.1 潛在的資源管理問題 346
14.5.2 資源獲取即初始化 348
14.5.3 保證 348
14.5.4 unique_ptr 349
14.5.5 以移動方式返回結果 350
14.5.6 vector類的RAII 351
簡單練習 352
思考題 353
術語 354
習題 354
附言 355
附錄A C++語言概要 356
附錄B Visual Studio簡要入門教程 395
術語表 398
參考文獻 402