本書(shū)在第1版的基礎(chǔ)上針對(duì)新的C 11標(biāo)準(zhǔn)重新撰寫(xiě),講解如何用C 11編寫(xiě)面向?qū)ο蟪绦。本?shū)以面向?qū)ο蟾拍顬橹骶(xiàn)索,內(nèi)容由淺入深,主要包括:面向?qū)ο蠡A(chǔ),C 語(yǔ)言概覽和語(yǔ)言基礎(chǔ),復(fù)合類(lèi)型,函數(shù),類(lèi)和對(duì)象,構(gòu)造函數(shù)和析構(gòu)函數(shù),運(yùn)算符重載,組合與繼承,虛函數(shù)與多態(tài)性,模板與泛型編程,標(biāo)準(zhǔn)庫(kù)容器和異常處理。
本書(shū)內(nèi)容體系組織符合高校課程開(kāi)設(shè)特點(diǎn),適合作為高等院校計(jì)算機(jī)及相關(guān)專(zhuā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)編寫(xiě),并在GNU GCC編譯環(huán)境下調(diào)試通過(guò)。l 從C 語(yǔ)言的語(yǔ)法、語(yǔ)義和語(yǔ)用三個(gè)層面著手,除了詳細(xì)介紹C 的各種語(yǔ)法概念及其語(yǔ)義之外,更著重其語(yǔ)用知識(shí):在特定情況下應(yīng)該使用何種語(yǔ)法結(jié)構(gòu),用它們來(lái)解決什么樣的問(wèn)題。l 在習(xí)題的思考題部分增加了一些軟件公司的C 筆試題,以便讀者深入了解C 在實(shí)際中的應(yīng)用。l 穿插介紹了一些實(shí)用的編程經(jīng)驗(yàn),例如程序的多文件組織、變量命名、函數(shù)的設(shè)計(jì)、類(lèi)的設(shè)計(jì)、錯(cuò)誤處理技術(shù)等。
第1章 面向?qū)ο蠡A(chǔ) 1
1.1 程序設(shè)計(jì)范型 1
1.2 面向?qū)ο蟮幕靖拍?2
1.2.1 對(duì)象和類(lèi) 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 類(lèi)之間的關(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 語(yǔ)言概覽 17
2.1 C 語(yǔ)言的特點(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 集成開(kāi)發(fā)環(huán)境的使用 25
2.4.1
使用IDE開(kāi)發(fā)C 程序 25
2.4.2
Code::Blocks使用示例 26
2.5
C 語(yǔ)言特性概覽 32
2.6 小結(jié) 33
2.7 習(xí)題 33
第3章 C 語(yǔ)言基礎(chǔ) 35
3.1 基本內(nèi)置類(lèi)型 36
3.1.1
算術(shù)類(lèi)型 37
3.1.2
帶符號(hào)和無(wú)符號(hào)類(lèi)型 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
類(lèi)型轉(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
類(lèi)型轉(zhuǎn)換 59
3.4 語(yǔ)句 62
3.4.1
簡(jiǎn)單語(yǔ)句和復(fù)合語(yǔ)句 62
3.4.2
聲明語(yǔ)句 63
3.4.3
if語(yǔ)句 63
3.4.4
switch語(yǔ)句 65
3.4.5
while語(yǔ)句 69
3.4.6
for語(yǔ)句 70
3.4.7
do-while語(yǔ)句 72
3.4.8
break和continue語(yǔ)句 74
3.4.9
goto語(yǔ)句 75
3.5 編程示例:顯示素?cái)?shù) 76
3.6 小結(jié) 78
3.7 習(xí)題 78
第4章 復(fù)合類(lèi)型 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
訪(fǎng)問(wèn)數(shù)組元素 102
4.3.3
數(shù)組與指針 103
4.3.4
字符數(shù)組和C風(fēng)格字符串 104
4.4 標(biāo)準(zhǔn)庫(kù)類(lèi)型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ù)類(lèi)型vector 112
4.5.1
定義和初始化vector 113
4.5.2
向vector中添加元素 114
4.5.3
訪(fǎng)問(wèn)vector中的元素 115
4.6 迭代器 116
4.7 編程示例:文件數(shù)據(jù)處理 118
4.7.1
算法和數(shù)據(jù)結(jié)構(gòu) 118
4.7.2
文件讀寫(xiě) 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 返回類(lèi)型和return語(yǔ)句 140
5.3.1
返回值 141
5.3.2
返回引用 141
5.3.3
返回列表 143
5.3.4
main()函數(shù)的返回值 143
5.3.5
尾置返回類(lèi)型 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ǔ)類(lèi)別 158
5.7.1
作用域 159
5.7.2
存儲(chǔ)類(lèi)別和存儲(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章 類(lèi)和對(duì)象 180
6.1 類(lèi)的定義 180
6.1.1
基本語(yǔ)言定義的ADT 181
6.1.2
數(shù)據(jù)成員與成員函數(shù) 182
6.1.3
數(shù)據(jù)成員的類(lèi)內(nèi)初始化 183
6.1.4
成員函數(shù)的類(lèi)外定義 183
6.1.5
類(lèi)代碼的組織 184
6.1.6
包含守衛(wèi) 185
6.2 訪(fǎng)問(wèn)控制和封裝 186
6.2.1
信息隱藏的必要性 186
6.2.2
訪(fǎng)問(wèn)限定符 187
6.2.3
類(lèi)和對(duì)象 188
6.2.4
this指針 191
6.2.5
訪(fǎng)問(wèn)器和修改器 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 類(lèi)設(shè)計(jì)的例子 220
6.7.1
類(lèi)的設(shè)計(jì) 221
6.7.2
類(lèi)的UML表示法 221
6.7.3
動(dòng)態(tài)字符棧類(lèi) 222
6.7.4
字符串類(lèi) 223
6.7.5
單鏈表類(lèi) 226
6.8 小結(jié) 228
6.9 習(xí)題 229
第7章 對(duì)象的初始化、復(fù)制和銷(xiāo)毀 235
7.1 對(duì)象的初始化和銷(xiāo)毀 235
7.1.1
對(duì)象的初始化 238
7.1.2
默認(rèn)構(gòu)造函數(shù) 239
7.1.3
隱式類(lèi)型轉(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ù)和寫(xiě)時(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ù)和返回類(lèi)型 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 用戶(hù)定義的類(lèi)型轉(zhuǎn)換 294
8.4.1
類(lèi)型轉(zhuǎn)換運(yùn)算符 294
8.4.2
自動(dòng)類(lèi)型轉(zhuǎn)換可能引起的二義性問(wè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ù)用類(lèi)的實(shí)現(xiàn) 307
9.1.1
對(duì)象成員與組合關(guān)系 308
9.1.2
對(duì)象成員的初始化 310
9.1.3
復(fù)用類(lèi)的實(shí)現(xiàn) 311
9.1.4
指針成員與聚合關(guān)系 312
9.1.5
指針成員與關(guān)聯(lián)關(guān)系 314
9.2 繼承復(fù)用類(lèi)的接口 315
9.2.1
繼承的語(yǔ)法 315
9.2.2
派生類(lèi)成員的訪(fǎng)問(wèn)控制 316
9.2.3
公有繼承和私有繼承 320
9.2.4
派生類(lèi)對(duì)象的創(chuàng)建和撤銷(xiāo) 322
9.2.5
繼承與特殊成員 326
9.3 派生類(lèi)與基類(lèi)的不同 327
9.3.1
覆蓋與同名隱藏 327
9.3.2
擴(kuò)充接口 331
9.4 派生類(lèi)向基類(lèi)的類(lèi)型轉(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
虛基類(lèi) 350
9.7 小結(jié) 351
9.8 習(xí)題 352
第10章 虛函數(shù)與多態(tài)性 358
10.1
派生類(lèi)向基類(lèi)的類(lèi)型轉(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
抽象類(lèi) 375
10.5
RTTI 378
10.5.1
dynamic_cast與向下類(lèi)型轉(zhuǎn)換 378
10.5.2 typeid 381
10.6
類(lèi)層次設(shè)計(jì)的例子 382
10.6.1 模仿釣魚(yú)的例子 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
類(lèi)模板 399
11.2.1 類(lèi)模板的定義 400
11.2.2 類(lèi)模板的實(shí)例化 401
11.2.3 類(lèi)模板的成員函數(shù) 401
11.2.4 模板的非類(lèi)型參數(shù) 402
11.2.5 類(lèi)模板的靜態(tài)數(shù)據(jù)成員 403
11.2.6 類(lèi)模板的友元 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類(lèi)的額外操作 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類(lèi)型 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語(yǔ)句塊 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說(shuō)明 456
13.4
標(biāo)準(zhǔn)異常 458
13.4.1 自定義異常類(lèi)型 460
13.4.2 處理類(lèi)類(lèi)型的異常 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