本書在第1版的基礎上針對新的C 11標準重新撰寫,講解如何用C 11編寫面向對象程序。本書以面向對象概念為主線索,內容由淺入深,主要包括:面向對象基礎,C 語言概覽和語言基礎,復合類型,函數(shù),類和對象,構造函數(shù)和析構函數(shù),運算符重載,組合與繼承,虛函數(shù)與多態(tài)性,模板與泛型編程,標準庫容器和異常處理。
本書內容體系組織符合高校課程開設特點,適合作為高等院校計算機及相關專業(yè)本科生的C 程序設計教材,也可作為學習C 和面向對象程序設計的參考讀物。
l 教材強調C 11的實用性和易用性,具有以下特色:l 所有示例程序均使用C 11標準編寫,并在GNU GCC編譯環(huán)境下調試通過。l 從C 語言的語法、語義和語用三個層面著手,除了詳細介紹C 的各種語法概念及其語義之外,更著重其語用知識:在特定情況下應該使用何種語法結構,用它們來解決什么樣的問題。l 在習題的思考題部分增加了一些軟件公司的C 筆試題,以便讀者深入了解C 在實際中的應用。l 穿插介紹了一些實用的編程經(jīng)驗,例如程序的多文件組織、變量命名、函數(shù)的設計、類的設計、錯誤處理技術等。
第1章 面向對象基礎 1
1.1 程序設計范型 1
1.2 面向對象的基本概念 2
1.2.1 對象和類 3
1.2.2 封裝和信息/實現(xiàn)隱藏 4
1.2.3 接口、實現(xiàn)和消息傳遞 6
1.2.4 繼承 8
1.2.5 多態(tài)性 10
1.2.6 類之間的關系 12
1.3 面向對象程序的特點 13
1.4 面向對象方法發(fā)展簡史 14
1.5 小結 16
1.6 習題 16
第2章 C 語言概覽 17
2.1 C 語言的特點 17
2.1.1 C 的發(fā)展和標準化 17
2.1.2 C 的特點 18
2.2 第一個C 程序 19
2.2.1
程序基本結構 20
2.2.2 程序的編譯和運行 21
2.3 輸入和輸出 22
2.3.1 標準輸入輸出 23
2.3.2 注釋 24
2.4 集成開發(fā)環(huán)境的使用 25
2.4.1
使用IDE開發(fā)C 程序 25
2.4.2
Code::Blocks使用示例 26
2.5
C 語言特性概覽 32
2.6 小結 33
2.7 習題 33
第3章 C 語言基礎 35
3.1 基本內置類型 36
3.1.1
算術類型 37
3.1.2
帶符號和無符號類型 39
3.1.3
字面值常量 40
3.1.4
數(shù)據(jù)的輸入和輸出 42
3.2 變量和常量 45
3.2.1
變量定義 45
3.2.2
標識符 45
3.2.3
初始化 46
3.2.4
賦值 47
3.2.5
類型轉換 48
3.2.6
變量聲明 48
3.2.7
名字的作用域 49
3.2.8
const對象 51
3.2.9
常量表達式和constexpr 52
3.2.10
auto和decltype 53
3.3 運算符和表達式 54
3.3.1
基本概念 54
3.3.2
算術運算符 55
3.3.3
關系和邏輯運算符 55
3.3.4
賦值運算符 56
3.3.5
自增和自減 57
3.3.6
位運算符 57
3.3.7
sizeof運算符 58
3.3.8
條件運算符 58
3.3.9
逗號運算符 59
3.3.10
類型轉換 59
3.4 語句 62
3.4.1
簡單語句和復合語句 62
3.4.2
聲明語句 63
3.4.3
if語句 63
3.4.4
switch語句 65
3.4.5
while語句 69
3.4.6
for語句 70
3.4.7
do-while語句 72
3.4.8
break和continue語句 74
3.4.9
goto語句 75
3.5 編程示例:顯示素數(shù) 76
3.6 小結 78
3.7 習題 78
第4章 復合類型 83
4.1 指針和引用 83
4.1.1
指針 84
4.1.2
new和delete 87
4.1.3
引用 90
4.1.4
右值引用 92
4.1.5
const限定指針和引用 93
4.2 結構體、聯(lián)合和枚舉 97
4.2.1
結構體 97
4.2.2
聯(lián)合 99
4.2.3
枚舉 100
4.3 內置數(shù)組 101
4.3.1
定義和初始化數(shù)組 101
4.3.2
訪問數(shù)組元素 102
4.3.3
數(shù)組與指針 103
4.3.4
字符數(shù)組和C風格字符串 104
4.4 標準庫類型string 105
4.4.1
定義和初始化string對象 106
4.4.2
string對象上的操作 106
4.4.3
處理string對象中的字符 109
4.5 標準庫類型vector 112
4.5.1
定義和初始化vector 113
4.5.2
向vector中添加元素 114
4.5.3
訪問vector中的元素 115
4.6 迭代器 116
4.7 編程示例:文件數(shù)據(jù)處理 118
4.7.1
算法和數(shù)據(jù)結構 118
4.7.2
文件讀寫 119
4.7.3
字符串流 121
4.7.4
完成的程序 123
4.8 小結 124
4.9 習題 125
第5章 函數(shù) 127
5.1 函數(shù)基礎 127
5.1.1
函數(shù)定義 128
5.1.2
函數(shù)調用 128
5.1.3
函數(shù)聲明 130
5.1.4
遞歸函數(shù) 131
5.2 參數(shù)傳遞 131
5.2.1
按值傳遞 132
5.2.2
按引用傳遞 135
5.2.3
參數(shù)傳遞方式的選擇 138
5.2.4
數(shù)組參數(shù) 138
5.2.5
main()函數(shù)的參數(shù) 138
5.2.6
不定個數(shù)的參數(shù) 139
5.3 返回類型和return語句 140
5.3.1
返回值 141
5.3.2
返回引用 141
5.3.3
返回列表 143
5.3.4
main()函數(shù)的返回值 143
5.3.5
尾置返回類型 144
5.4 函數(shù)重載 144
5.4.1
重載函數(shù) 144
5.4.2
重載函數(shù)的調用 145
5.4.3
重載函數(shù)的判斷 146
5.4.4
重載函數(shù)解析 147
5.5 特殊用途的函數(shù)特征 151
5.5.1
默認實參 151
5.5.2
inline函數(shù) 152
5.5.3
constexpr函數(shù) 153
5.6 函數(shù)指針 155
5.6.1
定義函數(shù)指針 155
5.6.2
使用函數(shù)指針 155
5.6.3
函數(shù)指針的數(shù)組 156
5.6.4
函數(shù)指針形參 157
5.7 作用域和存儲類別 158
5.7.1
作用域 159
5.7.2
存儲類別和存儲空間分配 163
5.8
namespace 164
5.8.1
命名空間的定義 164
5.8.2
命名空間成員的使用 166
5.8.3
標準命名空間std 168
5.9 程序代碼組織 169
5.9.1
聲明和頭文件包含 169
5.9.2
函數(shù)代碼的組織 169
5.9.3
命名空間的代碼組織 170
5.9.4
鏈接指示符:externC 171
5.10
設計高質量的函數(shù) 171
5.10.1
創(chuàng)建函數(shù)的理由 171
5.10.2
函數(shù)的命名 172
5.10.3
如何使用函數(shù)的參數(shù) 173
5.10.4
設置函數(shù)的返回值 174
5.11
小結 174
5.12
習題 175
第6章 類和對象 180
6.1 類的定義 180
6.1.1
基本語言定義的ADT 181
6.1.2
數(shù)據(jù)成員與成員函數(shù) 182
6.1.3
數(shù)據(jù)成員的類內初始化 183
6.1.4
成員函數(shù)的類外定義 183
6.1.5
類代碼的組織 184
6.1.6
包含守衛(wèi) 185
6.2 訪問控制和封裝 186
6.2.1
信息隱藏的必要性 186
6.2.2
訪問限定符 187
6.2.3
類和對象 188
6.2.4
this指針 191
6.2.5
訪問器和修改器 192
6.2.6
友元 193
6.2.7
進一步的隱藏 195
6.3 構造函數(shù)和析構函數(shù) 199
6.3.1
構造函數(shù) 200
6.3.2
構造函數(shù)初始化列表 201
6.3.3
委托構造函數(shù) 202
6.3.4
析構函數(shù) 204
6.4
const成員 206
6.4.1
const數(shù)據(jù)成員 206
6.4.2
const成員函數(shù) 207
6.4.3
mutable成員 209
6.4.4
const用法小結 211
6.5
static成員 212
6.5.1
static數(shù)據(jù)成員 213
6.5.2
static成員函數(shù) 215
6.5.3
單件模式 216
6.5.4 static用法小結 217
6.6 指向成員的指針 217
6.6.1
數(shù)據(jù)成員的指針 217
6.6.2
成員函數(shù)的指針 219
6.7 類設計的例子 220
6.7.1
類的設計 221
6.7.2
類的UML表示法 221
6.7.3
動態(tài)字符棧類 222
6.7.4
字符串類 223
6.7.5
單鏈表類 226
6.8 小結 228
6.9 習題 229
第7章 對象的初始化、復制和銷毀 235
7.1 對象的初始化和銷毀 235
7.1.1
對象的初始化 238
7.1.2
默認構造函數(shù) 239
7.1.3
隱式類型轉換構造函數(shù) 240
7.1.4
析構函數(shù) 241
7.1.5
拷貝控制成員 243
7.2 拷貝構造函數(shù) 245
7.3 拷貝賦值運算符 249
7.4 對象復制和移動 253
7.4.1
移動構造函數(shù)和移動賦值運算符 254
7.4.2
成員函數(shù)的復制和移動版本 258
7.4.3
是否要定義拷貝控制成員 259
7.4.4
交換操作 259
7.5 編譯器合成的成員函數(shù) 264
7.5.1
=delete 266
7.5.2
=default 266
7.6 引用計數(shù)和寫時復制技術 267
7.6.1
內置指針實現(xiàn)引用計數(shù) 268
7.6.2
智能指針 270
7.6.3
智能指針實現(xiàn)引用計數(shù) 274
7.7 小結 276
7.8 習題 276
第8章 運算符重載 279
8.1 基本概念 279
8.1.1
運算符函數(shù) 280
8.1.2
運算符重載的限制 280
8.1.3
慎用運算符重載 281
8.2 常用運算符的重載 282
8.2.1
一元運算符 282
8.2.2
二元運算符 285
8.2.3
運算符函數(shù)的參數(shù)和返回類型 289
8.2.4
非成員運算符和成員運算符 290
8.2.5
重載輸入輸出運算符 290
8.2.6
重載賦值運算符 292
8.3 重載下標運算符 292
8.4 用戶定義的類型轉換 294
8.4.1
類型轉換運算符 294
8.4.2
自動類型轉換可能引起的二義性問題 297
8.5 函數(shù)調用運算符 298
8.5.1
函數(shù)對象 298
8.5.2
lambda函數(shù) 299
8.5.3
標準庫定義的函數(shù)對象 302
8.5.4
標準庫函數(shù)bind 303
8.6 小結 304
8.7 習題 305
第9章 組合與繼承 307
9.1 組合復用類的實現(xiàn) 307
9.1.1
對象成員與組合關系 308
9.1.2
對象成員的初始化 310
9.1.3
復用類的實現(xiàn) 311
9.1.4
指針成員與聚合關系 312
9.1.5
指針成員與關聯(lián)關系 314
9.2 繼承復用類的接口 315
9.2.1
繼承的語法 315
9.2.2
派生類成員的訪問控制 316
9.2.3
公有繼承和私有繼承 320
9.2.4
派生類對象的創(chuàng)建和撤銷 322
9.2.5
繼承與特殊成員 326
9.3 派生類與基類的不同 327
9.3.1
覆蓋與同名隱藏 327
9.3.2
擴充接口 331
9.4 派生類向基類的類型轉換 332
9.5 組合與繼承的選擇 335
9.5.1
組合的應用 336
9.5.2
繼承的應用 337
9.5.3
組合的例子 339
9.6.4
繼承的例子 342
9.6 多重繼承 347
9.6.1
多重繼承引起的二義性 348
9.6.2
虛基類 350
9.7 小結 351
9.8 習題 352
第10章 虛函數(shù)與多態(tài)性 358
10.1
派生類向基類的類型轉換 358
10.2
虛函數(shù) 361
10.2.1 聲明虛函數(shù) 361
10.2.2 虛函數(shù)的覆蓋規(guī)則 365
10.2.3 虛析構函數(shù) 368
10.2.4 實現(xiàn)多態(tài)性的步驟 369
10.3
動態(tài)綁定的實現(xiàn) 371
10.4
抽象類 375
10.5
RTTI 378
10.5.1
dynamic_cast與向下類型轉換 378
10.5.2 typeid 381
10.6
類層次設計的例子 382
10.6.1 模仿釣魚的例子 382
10.6.2 零件庫存管理的例子 385
10.7
小結 390
10.8
習題 390
第11章 模板與泛型編程 394
11.1
函數(shù)模板 394
11.1.1 函數(shù)模板的定義 395
11.1.2 函數(shù)模板的實例化 397
11.1.3 函數(shù)模板的重載 398
11.2
類模板 399
11.2.1 類模板的定義 400
11.2.2 類模板的實例化 401
11.2.3 類模板的成員函數(shù) 401
11.2.4 模板的非類型參數(shù) 402
11.2.5 類模板的靜態(tài)數(shù)據(jù)成員 403
11.2.6 類模板的友元 403
11.3
模板的編譯 404
11.3.1 模板的代碼組織 405
11.3.2 顯式實例化 408
11.4
模板的更多特性 408
11.4.1 模板的默認實參 408
11.4.2 模板特化 409
11.4.3 可變參數(shù)模板 410
11.5
模板和代碼復用 412
11.6
小結 413
11.7
習題 413
第12章 標準庫容器和算法 414
12.1
容器和算法概覽 414
12.1.1 容器概覽 414
12.1.2 容器操作概覽 415
12.1.3 算法概覽 417
12.2
順序容器 417
12.2.1 通用操作 418
12.2.2 特有操作 421
12.2.3 順序容器適配器 424
12.2.4
string類的額外操作 425
12.3
迭代器 428
12.3.1 迭代器的運算 428
12.3.2 與迭代器有關的容器操作 430
12.3.3 反向迭代器 431
12.4
關聯(lián)容器 432
12.4.1
pair類型 433
12.4.2 關聯(lián)容器的操作 433
12.4.3
map 435
12.4.4
set 436
12.5
泛型算法 437
12.5.1 查找 439
12.5.2 排序 439
12.6
小結 440
12.7
習題 440
第13章 異常處理 442
13.1
異常處理機制 442
13.1.1 拋出異常 443
13.1.2
try語句塊 445
13.1.3 異常處理流程 449
13.1.4 異常對象 451
13.2
捕獲異常 451
13.2.1 重新拋出異常 454
13.2.2 捕獲所有異常 455
13.2.3 程序終止 455
13.3
noexcept說明 456
13.4
標準異常 458
13.4.1 自定義異常類型 460
13.4.2 處理類類型的異常 460
13.5
其他錯誤處理技術 460
13.5.1 輸入數(shù)據(jù)檢驗 461
13.5.2 斷言 461
13.5.3 錯誤數(shù)據(jù)處理 462
13.5.4 審慎使用異常 463
13.6
小結 464
13.7
習題 465