本書在第1版的基礎(chǔ)上針對(duì)新的C 11標(biāo)準(zhǔn)重新撰寫,講解如何用C 11編寫面向?qū)ο蟪绦。本書以面向(qū)ο蟾拍顬橹骶索,內(nèi)容由淺入深,主要包括:面向?qū)ο蠡A(chǔ),C 語言概覽和語言基礎(chǔ),復(fù)合類型,函數(shù),類和對(duì)象,構(gòu)造函數(shù)和析構(gòu)函數(shù),運(yùn)算符重載,組合與繼承,虛函數(shù)與多態(tài)性,模板與泛型編程,標(biāo)準(zhǔn)庫(kù)容器和異常處理。
本書內(nèi)容體系組織符合高校課程開設(shè)特點(diǎn),適合作為高等院校計(jì)算機(jī)及相關(guān)專業(yè)本科生的C 程序設(shè)計(jì)教材,也可作為學(xué)習(xí)C 和面向?qū)ο蟪绦蛟O(shè)計(jì)的參考讀物。
l 教材強(qiáng)調(diào)C 11的實(shí)用性和易用性,具有以下特色:l 所有示例程序均使用C 11標(biāo)準(zhǔn)編寫,并在GNU GCC編譯環(huán)境下調(diào)試通過。l 從C 語言的語法、語義和語用三個(gè)層面著手,除了詳細(xì)介紹C 的各種語法概念及其語義之外,更著重其語用知識(shí):在特定情況下應(yīng)該使用何種語法結(jié)構(gòu),用它們來解決什么樣的問題。l 在習(xí)題的思考題部分增加了一些軟件公司的C 筆試題,以便讀者深入了解C 在實(shí)際中的應(yīng)用。l 穿插介紹了一些實(shí)用的編程經(jīng)驗(yàn),例如程序的多文件組織、變量命名、函數(shù)的設(shè)計(jì)、類的設(shè)計(jì)、錯(cuò)誤處理技術(shù)等。
第1章 面向?qū)ο蠡A(chǔ) 1
1.1 程序設(shè)計(jì)范型 1
1.2 面向?qū)ο蟮幕靖拍?2
1.2.1 對(duì)象和類 3
1.2.2 封裝和信息/實(shí)現(xiàn)隱藏 4
1.2.3 接口、實(shí)現(xiàn)和消息傳遞 6
1.2.4 繼承 8
1.2.5 多態(tài)性 10
1.2.6 類之間的關(guān)系 12
1.3 面向?qū)ο蟪绦虻奶攸c(diǎn) 13
1.4 面向?qū)ο蠓椒òl(fā)展簡(jiǎn)史 14
1.5 小結(jié) 16
1.6 習(xí)題 16
第2章 C 語言概覽 17
2.1 C 語言的特點(diǎn) 17
2.1.1 C 的發(fā)展和標(biāo)準(zhǔn)化 17
2.1.2 C 的特點(diǎn) 18
2.2 第一個(gè)C 程序 19
2.2.1
程序基本結(jié)構(gòu) 20
2.2.2 程序的編譯和運(yùn)行 21
2.3 輸入和輸出 22
2.3.1 標(biāo)準(zhǔn)輸入輸出 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 小結(jié) 33
2.7 習(xí)題 33
第3章 C 語言基礎(chǔ) 35
3.1 基本內(nèi)置類型 36
3.1.1
算術(shù)類型 37
3.1.2
帶符號(hào)和無符號(hào)類型 39
3.1.3
字面值常量 40
3.1.4
數(shù)據(jù)的輸入和輸出 42
3.2 變量和常量 45
3.2.1
變量定義 45
3.2.2
標(biāo)識(shí)符 45
3.2.3
初始化 46
3.2.4
賦值 47
3.2.5
類型轉(zhuǎn)換 48
3.2.6
變量聲明 48
3.2.7
名字的作用域 49
3.2.8
const對(duì)象 51
3.2.9
常量表達(dá)式和constexpr 52
3.2.10
auto和decltype 53
3.3 運(yùn)算符和表達(dá)式 54
3.3.1
基本概念 54
3.3.2
算術(shù)運(yùn)算符 55
3.3.3
關(guān)系和邏輯運(yùn)算符 55
3.3.4
賦值運(yùn)算符 56
3.3.5
自增和自減 57
3.3.6
位運(yùn)算符 57
3.3.7
sizeof運(yùn)算符 58
3.3.8
條件運(yùn)算符 58
3.3.9
逗號(hào)運(yùn)算符 59
3.3.10
類型轉(zhuǎn)換 59
3.4 語句 62
3.4.1
簡(jiǎn)單語句和復(fù)合語句 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 編程示例:顯示素?cái)?shù) 76
3.6 小結(jié) 78
3.7 習(xí)題 78
第4章 復(fù)合類型 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 結(jié)構(gòu)體、聯(lián)合和枚舉 97
4.2.1
結(jié)構(gòu)體 97
4.2.2
聯(lián)合 99
4.2.3
枚舉 100
4.3 內(nèi)置數(shù)組 101
4.3.1
定義和初始化數(shù)組 101
4.3.2
訪問數(shù)組元素 102
4.3.3
數(shù)組與指針 103
4.3.4
字符數(shù)組和C風(fēng)格字符串 104
4.4 標(biāo)準(zhǔn)庫(kù)類型string 105
4.4.1
定義和初始化string對(duì)象 106
4.4.2
string對(duì)象上的操作 106
4.4.3
處理string對(duì)象中的字符 109
4.5 標(biāo)準(zhǔn)庫(kù)類型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ù)結(jié)構(gòu) 118
4.7.2
文件讀寫 119
4.7.3
字符串流 121
4.7.4
完成的程序 123
4.8 小結(jié) 124
4.9 習(xí)題 125
第5章 函數(shù) 127
5.1 函數(shù)基礎(chǔ) 127
5.1.1
函數(shù)定義 128
5.1.2
函數(shù)調(diào)用 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
不定個(gè)數(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ù)的調(diào)用 145
5.4.3
重載函數(shù)的判斷 146
5.4.4
重載函數(shù)解析 147
5.5 特殊用途的函數(shù)特征 151
5.5.1
默認(rèn)實(shí)參 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 作用域和存儲(chǔ)類別 158
5.7.1
作用域 159
5.7.2
存儲(chǔ)類別和存儲(chǔ)空間分配 163
5.8
namespace 164
5.8.1
命名空間的定義 164
5.8.2
命名空間成員的使用 166
5.8.3
標(biāo)準(zhǔn)命名空間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è)計(jì)高質(zhì)量的函數(shù) 171
5.10.1
創(chuàng)建函數(shù)的理由 171
5.10.2
函數(shù)的命名 172
5.10.3
如何使用函數(shù)的參數(shù) 173
5.10.4
設(shè)置函數(shù)的返回值 174
5.11
小結(jié) 174
5.12
習(xí)題 175
第6章 類和對(duì)象 180
6.1 類的定義 180
6.1.1
基本語言定義的ADT 181
6.1.2
數(shù)據(jù)成員與成員函數(shù) 182
6.1.3
數(shù)據(jù)成員的類內(nèi)初始化 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
類和對(duì)象 188
6.2.4
this指針 191
6.2.5
訪問器和修改器 192
6.2.6
友元 193
6.2.7
進(jìn)一步的隱藏 195
6.3 構(gòu)造函數(shù)和析構(gòu)函數(shù) 199
6.3.1
構(gòu)造函數(shù) 200
6.3.2
構(gòu)造函數(shù)初始化列表 201
6.3.3
委托構(gòu)造函數(shù) 202
6.3.4
析構(gòu)函數(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用法小結(jié) 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用法小結(jié) 217
6.6 指向成員的指針 217
6.6.1
數(shù)據(jù)成員的指針 217
6.6.2
成員函數(shù)的指針 219
6.7 類設(shè)計(jì)的例子 220
6.7.1
類的設(shè)計(jì) 221
6.7.2
類的UML表示法 221
6.7.3
動(dòng)態(tài)字符棧類 222
6.7.4
字符串類 223
6.7.5
單鏈表類 226
6.8 小結(jié) 228
6.9 習(xí)題 229
第7章 對(duì)象的初始化、復(fù)制和銷毀 235
7.1 對(duì)象的初始化和銷毀 235
7.1.1
對(duì)象的初始化 238
7.1.2
默認(rèn)構(gòu)造函數(shù) 239
7.1.3
隱式類型轉(zhuǎn)換構(gòu)造函數(shù) 240
7.1.4
析構(gòu)函數(shù) 241
7.1.5
拷貝控制成員 243
7.2 拷貝構(gòu)造函數(shù) 245
7.3 拷貝賦值運(yùn)算符 249
7.4 對(duì)象復(fù)制和移動(dòng) 253
7.4.1
移動(dòng)構(gòu)造函數(shù)和移動(dòng)賦值運(yùn)算符 254
7.4.2
成員函數(shù)的復(fù)制和移動(dòng)版本 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 引用計(jì)數(shù)和寫時(shí)復(fù)制技術(shù) 267
7.6.1
內(nèi)置指針實(shí)現(xiàn)引用計(jì)數(shù) 268
7.6.2
智能指針 270
7.6.3
智能指針實(shí)現(xiàn)引用計(jì)數(shù) 274
7.7 小結(jié) 276
7.8 習(xí)題 276
第8章 運(yùn)算符重載 279
8.1 基本概念 279
8.1.1
運(yùn)算符函數(shù) 280
8.1.2
運(yùn)算符重載的限制 280
8.1.3
慎用運(yùn)算符重載 281
8.2 常用運(yùn)算符的重載 282
8.2.1
一元運(yùn)算符 282
8.2.2
二元運(yùn)算符 285
8.2.3
運(yùn)算符函數(shù)的參數(shù)和返回類型 289
8.2.4
非成員運(yùn)算符和成員運(yùn)算符 290
8.2.5
重載輸入輸出運(yùn)算符 290
8.2.6
重載賦值運(yùn)算符 292
8.3 重載下標(biāo)運(yùn)算符 292
8.4 用戶定義的類型轉(zhuǎn)換 294
8.4.1
類型轉(zhuǎn)換運(yùn)算符 294
8.4.2
自動(dòng)類型轉(zhuǎn)換可能引起的二義性問題 297
8.5 函數(shù)調(diào)用運(yùn)算符 298
8.5.1
函數(shù)對(duì)象 298
8.5.2
lambda函數(shù) 299
8.5.3
標(biāo)準(zhǔn)庫(kù)定義的函數(shù)對(duì)象 302
8.5.4
標(biāo)準(zhǔn)庫(kù)函數(shù)bind 303
8.6 小結(jié) 304
8.7 習(xí)題 305
第9章 組合與繼承 307
9.1 組合復(fù)用類的實(shí)現(xiàn) 307
9.1.1
對(duì)象成員與組合關(guān)系 308
9.1.2
對(duì)象成員的初始化 310
9.1.3
復(fù)用類的實(shí)現(xiàn) 311
9.1.4
指針成員與聚合關(guān)系 312
9.1.5
指針成員與關(guān)聯(lián)關(guān)系 314
9.2 繼承復(fù)用類的接口 315
9.2.1
繼承的語法 315
9.2.2
派生類成員的訪問控制 316
9.2.3
公有繼承和私有繼承 320
9.2.4
派生類對(duì)象的創(chuàng)建和撤銷 322
9.2.5
繼承與特殊成員 326
9.3 派生類與基類的不同 327
9.3.1
覆蓋與同名隱藏 327
9.3.2
擴(kuò)充接口 331
9.4 派生類向基類的類型轉(zhuǎn)換 332
9.5 組合與繼承的選擇 335
9.5.1
組合的應(yīng)用 336
9.5.2
繼承的應(yīng)用 337
9.5.3
組合的例子 339
9.6.4
繼承的例子 342
9.6 多重繼承 347
9.6.1
多重繼承引起的二義性 348
9.6.2
虛基類 350
9.7 小結(jié) 351
9.8 習(xí)題 352
第10章 虛函數(shù)與多態(tài)性 358
10.1
派生類向基類的類型轉(zhuǎn)換 358
10.2
虛函數(shù) 361
10.2.1 聲明虛函數(shù) 361
10.2.2 虛函數(shù)的覆蓋規(guī)則 365
10.2.3 虛析構(gòu)函數(shù) 368
10.2.4 實(shí)現(xiàn)多態(tài)性的步驟 369
10.3
動(dòng)態(tài)綁定的實(shí)現(xiàn) 371
10.4
抽象類 375
10.5
RTTI 378
10.5.1
dynamic_cast與向下類型轉(zhuǎn)換 378
10.5.2 typeid 381
10.6
類層次設(shè)計(jì)的例子 382
10.6.1 模仿釣魚的例子 382
10.6.2 零件庫(kù)存管理的例子 385
10.7
小結(jié) 390
10.8
習(xí)題 390
第11章 模板與泛型編程 394
11.1
函數(shù)模板 394
11.1.1 函數(shù)模板的定義 395
11.1.2 函數(shù)模板的實(shí)例化 397
11.1.3 函數(shù)模板的重載 398
11.2
類模板 399
11.2.1 類模板的定義 400
11.2.2 類模板的實(shí)例化 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 顯式實(shí)例化 408
11.4
模板的更多特性 408
11.4.1 模板的默認(rèn)實(shí)參 408
11.4.2 模板特化 409
11.4.3 可變參數(shù)模板 410
11.5
模板和代碼復(fù)用 412
11.6
小結(jié) 413
11.7
習(xí)題 413
第12章 標(biāo)準(zhǔn)庫(kù)容器和算法 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 迭代器的運(yùn)算 428
12.3.2 與迭代器有關(guān)的容器操作 430
12.3.3 反向迭代器 431
12.4
關(guān)聯(lián)容器 432
12.4.1
pair類型 433
12.4.2 關(guān)聯(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
小結(jié) 440
12.7
習(xí)題 440
第13章 異常處理 442
13.1
異常處理機(jī)制 442
13.1.1 拋出異常 443
13.1.2
try語句塊 445
13.1.3 異常處理流程 449
13.1.4 異常對(duì)象 451
13.2
捕獲異常 451
13.2.1 重新拋出異常 454
13.2.2 捕獲所有異常 455
13.2.3 程序終止 455
13.3
noexcept說明 456
13.4
標(biāo)準(zhǔn)異常 458
13.4.1 自定義異常類型 460
13.4.2 處理類類型的異常 460
13.5
其他錯(cuò)誤處理技術(shù) 460
13.5.1 輸入數(shù)據(jù)檢驗(yàn) 461
13.5.2 斷言 461
13.5.3 錯(cuò)誤數(shù)據(jù)處理 462
13.5.4 審慎使用異常 463
13.6
小結(jié) 464
13.7
習(xí)題 465