本書結(jié)合C++程序,簡要介紹了匯編語言,并以棧和隊(duì)列為主線,逐步深入面向?qū)ο蟮母拍。本書從面向過程轉(zhuǎn)向面向?qū)ο蟮木幊涕_始,接著引入類、內(nèi)聯(lián)、線程、異常、虛函數(shù)、運(yùn)算符重載、移動(dòng)語義等概念實(shí)現(xiàn)棧和隊(duì)列,然后基于繼承和聚合等概念通過雙棧模擬隊(duì)列,最后引入類模板、類型轉(zhuǎn)換、類型推導(dǎo)等概念實(shí)現(xiàn)棧和隊(duì)列,深入細(xì)致地介紹了ISO/IEC 14882:2017標(biāo)準(zhǔn)的全部語法。
為了培養(yǎng)學(xué)生面向?qū)ο蟮慕D芰,書中按照面向(qū)ο蟮姆治雠c設(shè)計(jì)步驟,完整展示了骰子游戲的建模過程,并用C++進(jìn)行了面向?qū)ο蟮某绦蛟O(shè)計(jì)。全書通過挖掘C++概念的應(yīng)用背景,提供了可供運(yùn)行的有趣實(shí)例和習(xí)題。
1.作者為華中科技大學(xué)C++課程組組長
2.全書內(nèi)容便于讀者自學(xué)
3.注重實(shí)用性和系統(tǒng)性,內(nèi)容循序漸進(jìn)、深入淺出,以常見易懂的棧和隊(duì)列為主線,逐步介紹面向?qū)ο蟮乃枷牒透拍睿沂久嫦驅(qū)ο笏枷氲纳羁虄?nèi)涵,并給出了應(yīng)用相關(guān)概念的完整程序?qū)嵗?br>4.為了使讀者能夠掌握面向?qū)ο蟮姆治觥⒃O(shè)計(jì)與編程方法,本書還完整地展示了骰子游戲的面向?qū)ο蠼<霸O(shè)計(jì)過程,并用C++語言進(jìn)行了面向?qū)ο蟮某绦蛟O(shè)計(jì)
5.本書給出了豐富的例題和習(xí)題,最后一章習(xí)題可用于課程設(shè)計(jì),能同時(shí)提高讀者的數(shù)學(xué)建模能力,以及面向?qū)ο蟮慕D芰?br>6.本書推薦使用Microsoft Visual Studio 2019編譯環(huán)境
馬光志,湖北鐘祥人,博士,副教授。先后在美國North Illinois University、Kennesaw State University培訓(xùn)及訪問。主要研究方向?yàn)槿斯ぶ悄堋D像處理、深度學(xué)習(xí),曾在國際期刊發(fā)表SCI論文20篇、國際會(huì)議發(fā)表論文10篇。主持與參加了近30個(gè)研究開發(fā)項(xiàng)目,包括國家自然科學(xué)基金、省自然科學(xué)基金、國家863及973、國家重大研發(fā)計(jì)劃、中英國際合作及中加國際合作項(xiàng)目,以及與醫(yī)學(xué)圖像、醫(yī)院信息、衛(wèi)生監(jiān)管等相關(guān)的多個(gè)研究開發(fā)項(xiàng)目。曾參加C語言至8086匯編語言編譯器的研究與開發(fā)項(xiàng)目,出版與C++及匯編語言相關(guān)的教材3部。
第1章 C++引論
1.1 計(jì)算機(jī)的體系結(jié)構(gòu) 1
1.1.1 計(jì)算機(jī)系統(tǒng)的結(jié)構(gòu) 1
1.1.2 數(shù)據(jù)與程序的存儲(chǔ)方式 3
1.2 進(jìn)制及其轉(zhuǎn)換和運(yùn)算 4
1.2.1 計(jì)算機(jī)采用二進(jìn)制的原因 5
1.2.2 C++的常用進(jìn)制及其運(yùn)算 5
1.3 80X86系列匯編語言 7
1.3.1 匯編語言及C++編譯簡介 7
1.3.2 匯編指令及C++程序編譯 9
1.4 C++的發(fā)展歷史及特點(diǎn) 12
1.4.1 C++的發(fā)展歷史 12
1.4.2 C++的特點(diǎn) 12
1.5 語法圖與程序流程圖 13
1.5.1 C++的語法圖 13
1.5.2 程序流程圖 15
1.6 編譯環(huán)境的安裝與使用 16
1.6.1 編譯過程及編譯環(huán)境 16
1.6.2 Microsoft Visual Studio 2019的安裝 17
練習(xí)題 22
第2章 類型、常量及變量
2.1 C++的單詞 23
2.1.1 C++的字符集 23
2.1.2 C++的關(guān)鍵字 24
2.2 預(yù)定義類型及值域和常量 25
2.2.1 預(yù)定義類型及其數(shù)值轉(zhuǎn)換 25
2.2.2 強(qiáng)制類型轉(zhuǎn)換及類型值域 26
2.2.3 預(yù)定義類型及相關(guān)常量 28
2.3 變量及其類型解析 31
2.3.1 變量的說明和定義 31
2.3.2 指針及其類型理解 34
2.3.3 有址引用變量 40
2.3.4 無址引用變量 45
2.3.5 元素、下標(biāo)及數(shù)組 47
2.4 運(yùn)算符及表達(dá)式 49
2.4.1 位運(yùn)算與等號(hào)運(yùn)算 49
2.4.2 指針運(yùn)算及其結(jié)合方向 50
2.4.3 關(guān)系運(yùn)算及結(jié)果轉(zhuǎn)換 51
2.5 結(jié)構(gòu)與聯(lián)合 52
2.5.1 結(jié)構(gòu)體 52
2.5.2 聯(lián)合體 54
練習(xí)題 56
第3章 語句、函數(shù)及程序設(shè)計(jì)
3.1 C++的語句 58
3.1.1 簡單語句 58
3.1.2 轉(zhuǎn)移語句 59
3.1.3 分支語句 60
3.1.4 循環(huán)語句 63
3.1.5 break和continue語句 67
3.1.6 asm和static_assert語句 68
3.2 C++的函數(shù) 68
3.2.1 函數(shù)說明與定義 69
3.2.2 頭文件與說明 70
3.2.3 函數(shù)的參數(shù)說明 72
3.2.4 函數(shù)重載 74
3.2.5 inline及constexpr函數(shù) 75
3.2.6 線程互斥及線程本地變量 77
3.3 作用域 79
3.3.1 全局作用域與模塊作用域 79
3.3.2 局部作用域與塊作用域 81
3.4 生命期 82
3.5 程序設(shè)計(jì)實(shí)例 84
3.5.1 棧編程實(shí)例 84
3.5.2 隊(duì)列編程實(shí)例 86
3.5.3 有限自動(dòng)機(jī)編程實(shí)例 87
練習(xí)題 90
第4章 C++的類
4.1 類的聲明及定義 92
4.1.1 面向?qū)ο蟮幕靖拍睢?2
4.1.2 類及對(duì)象定義的實(shí)例 93
4.2 成員訪問權(quán)限及突破方法 97
4.2.1 成員的訪問權(quán)限 97
4.2.2 突破成員的訪問權(quán)限 98
4.3 內(nèi)聯(lián)、匿名類及位段 99
4.3.1 函數(shù)成員的內(nèi)聯(lián) 99
4.3.2 無對(duì)象的匿名聯(lián)合 101
4.3.3 局部類及位段成員 102
4.4 new和delete運(yùn)算符 103
4.4.1 簡單類型及單個(gè)對(duì)象內(nèi)存管理 103
4.4.2 復(fù)雜類型及對(duì)象數(shù)組內(nèi)存管理 105
4.5 隱含參數(shù)this 107
4.6 對(duì)象的構(gòu)造與析構(gòu) 109
4.6.1 構(gòu)造函數(shù)及對(duì)象初始化 109
4.6.2 成員默認(rèn)值及構(gòu)造與析構(gòu) 110
4.7 類及對(duì)象的內(nèi)存布局 112
練習(xí)題 116
第5章 成員及成員指針
5.1 實(shí)例成員指針 117
5.1.1 實(shí)例成員指針的用法 117
5.1.2 實(shí)例成員指針的限制 118
5.2 const、volatile和mutable 119
5.2.1 const和volatile的用法 119
5.2.2 mutable實(shí)例數(shù)據(jù)成員 123
5.3 靜態(tài)數(shù)據(jù)成員 124
5.3.1 靜態(tài)數(shù)據(jù)成員的用法 124
5.3.2 靜態(tài)數(shù)據(jù)成員的限制 126
5.4 靜態(tài)函數(shù)成員 128
5.4.1 靜態(tài)函數(shù)成員的訪問 128
5.4.2 靜態(tài)函數(shù)成員的限制 129
5.5 靜態(tài)成員指針 130
5.5.1 靜態(tài)成員指針的用法 130
5.5.2 多種指針的混合用法 131
5.6 聯(lián)合的成員指針 132
練習(xí)題 133
第6章 繼承與構(gòu)造
6.1 單繼承類 136
6.2 繼承方式 138
6.2.1 繼承后成員的訪問權(quán)限 138
6.2.2 訪問權(quán)限的修改 141
6.3 成員訪問 142
6.4 構(gòu)造與析構(gòu) 143
6.4.1 對(duì)象構(gòu)造的執(zhí)行順序 143
6.4.2 new、delete引起的構(gòu)造與析構(gòu) 144
6.5 父類和子類 145
6.5.1 父類及其函數(shù)調(diào)用 145
6.5.2 友元和派生類函數(shù)中的父子類
關(guān)系 147
6.6 派生類的內(nèi)存布局 148
練習(xí)題 149
第7章 可訪問性
7.1 作用域 152
7.1.1 面向?qū)ο蟮淖饔糜颉?52
7.1.2 面向過程的作用域 155
7.2 名字空間 156
7.2.1 名字空間的基本用法 156
7.2.2 使用名字空間的注意事項(xiàng) 158
7.3 成員友元 160
7.3.1 成員友元的一般用法 161
7.3.2 互為依賴的類的友元 162
7.4 普通友元及其注意事項(xiàng) 163
7.4.1 普通友元的一般用法 163
7.4.2 友元使用的注意事項(xiàng) 165
7.5 覆蓋與隱藏 167
7.5.1 覆蓋與隱藏的用法 167
7.5.2 使用using避免成員覆蓋 169
練習(xí)題 170
第8章 多態(tài)與虛函數(shù)
8.1 虛函數(shù) 174
8.1.1 虛函數(shù)的聲明及定義 174
8.1.2 虛函數(shù)的重載及內(nèi)聯(lián) 176
8.2 虛析構(gòu)函數(shù) 179
8.3 類的引用 180
8.3.1 類的引用變量及其析構(gòu) 181
8.3.2 類的引用參數(shù)及其析構(gòu) 183
8.4 抽象類 186
8.4.1 抽象類的定義及用法 186
8.4.2 抽象類的應(yīng)用實(shí)例 187
8.5 虛函數(shù)友元與晚期綁定 189
8.5.1 虛函數(shù)作為友元 190
8.5.2 虛函數(shù)的晚期綁定 191
8.6 有虛函數(shù)時(shí)的內(nèi)存布局 192
8.6.1 基類有虛函數(shù)時(shí)的內(nèi)存布局 192
8.6.2 基類無虛函數(shù)時(shí)的內(nèi)存布局 193
練習(xí)題 194
第9章 多繼承與虛基類
9.1 多繼承類 196
9.1.1 無多繼承的替代方案 196
9.1.2 多繼承存在的問題 197
9.2 虛基類 198
9.3 派生類成員 200
9.3.1 無虛基類時(shí)的成員同名 200
9.3.2 有虛基類時(shí)的成員同名 201
9.4 單重及多重繼承的構(gòu)造與析構(gòu) 202
9.4.1 單繼承的構(gòu)造與析構(gòu) 202
9.4.2 多繼承的構(gòu)造與析構(gòu) 204
9.5 多繼承類的內(nèi)存布局 205
9.5.1 無虛基類時(shí)的內(nèi)存布局 205
9.5.2 有虛基類時(shí)的內(nèi)存布局 207
練習(xí)題 209
第10章 異常與斷言
10.1 異常處理 212
10.1.1 拋出與捕獲 212
10.1.2 異常的傳播 213
10.2 捕獲順序 214
10.3 函數(shù)的異常接口 216
10.3.1 異常接口聲明 216
10.3.2 noexcept接口 217
10.4 異常類型 219
10.5 異常對(duì)象的析構(gòu) 220
10.5.1 通過對(duì)象指針析構(gòu) 220
10.5.2 未完成對(duì)象的析構(gòu) 221
10.6 斷言 223
練習(xí)題 224
第11章 運(yùn)算符重載
11.1 運(yùn)算符概述 225
11.1.1 結(jié)果為左值的運(yùn)算符 225
11.1.2 運(yùn)算符重載的分類 226
11.1.3 成員與非成員重載 227
11.2 運(yùn)算符參數(shù) 228
11.2.1 自增與自減的重載 228
11.2.2 重載->運(yùn)算符 230
11.2.3 單雙目運(yùn)算符的重載 231
11.3 賦值與調(diào)用 232
11.3.1 賦值運(yùn)算符的重載 232
11.3.2 構(gòu)造函數(shù)的重載 233
11.3.3 安全的編程方法 235
11.4 強(qiáng)制類型轉(zhuǎn)換 236
11.4.1 單個(gè)顯式參數(shù)構(gòu)造函數(shù) 236
11.4.2 強(qiáng)制類型轉(zhuǎn)換重載函數(shù) 237
11.5 重載new和delete 238
11.6 運(yùn)算符重載實(shí)例 240
11.6.1 符號(hào)表運(yùn)算的重載實(shí)例 240
11.6.2 棧及隊(duì)列運(yùn)算重載實(shí)例 241
練習(xí)題 244
第12章 類型解析、轉(zhuǎn)換與推導(dǎo)
12.1 隱式與顯式類型轉(zhuǎn)換 250
12.1.1 簡單類型的隱式轉(zhuǎn)換 250
12.1.2 簡單類型的顯式轉(zhuǎn)換 252
12.1.3 簡單類型的轉(zhuǎn)換結(jié)果 253
12.2 cast系列類型轉(zhuǎn)換 256
12.2.1 static_cast——靜態(tài)轉(zhuǎn)換 256
12.2.2 const_cast——只讀轉(zhuǎn)換 257
12.2.3 dynamic_cast——?jiǎng)討B(tài)轉(zhuǎn)換 260
12.2.4 reinterpret_cast——重釋轉(zhuǎn)換 263
12.3 類型轉(zhuǎn)換實(shí)例 265
12.3.1 typeid獲取類型標(biāo)識(shí) 265
12.3.2 explicit要求顯式調(diào)用 267
12.3.3 棧的類型轉(zhuǎn)換實(shí)例 268
12.4 自動(dòng)類型推導(dǎo) 270
12.4.1 auto的一般用法 271
12.4.2 auto用于函數(shù)和數(shù)組 271
12.4.3 表達(dá)式類型的提取 272
12.5 Lambda表達(dá)式 273
12.5.1 Lambda表達(dá)式的聲明 273
12.5.2 Lambda表達(dá)式的參數(shù) 275
12.5.3 準(zhǔn)函數(shù)Lambda表達(dá)式 278
練習(xí)題 279
第13章 模板與內(nèi)存回收
13.1 變量模板及其實(shí)例 280
13.1.1 變量模板的定義 280
13.1.2 變量模板的實(shí)例化 281
13.2 函數(shù)模板 282
13.2.1 函數(shù)模板的定義 282
13.2.2 成員函數(shù)模板的定義 283
13.2.3 函數(shù)模板的參數(shù) 284
13.3 函數(shù)模板實(shí)例化 285
13.3.1 函數(shù)模板強(qiáng)制實(shí)例化 285
13.3.2 函數(shù)模板實(shí)例特化 286
13.3.3 涉及指針的模板實(shí)例化 287
13.4 類模板 288
13.4.1 類模板的定義 288
13.4.2 派生類類模板的定義 289
13.4.3 多類型參數(shù)的類模板 290
13.4.4 省略參數(shù)的類模板 290
13.4.5 類模板的友元及Lambda表達(dá)式 292
13.5 類模板的實(shí)例化及特化 294
13.5.1 類模板的實(shí)例化 294
13.5.2 類模板實(shí)例特化 294
13.5.3 類模板的部分特化 296
13.5.4 實(shí)例化與類型推導(dǎo) 297
13.5.5 類模板及實(shí)例成員指針 298
13.5.6 模板分隔符的二義性 299
13.5.7 類模板與泛型 300
13.6 內(nèi)存回收實(shí)例 303
練習(xí)題 305
第14章 流及類庫
14.1 流類概述 307
14.2 輸出流 308
14.3 輸入流 311
14.4 文件流 312
14.5 串流處理 314
練習(xí)題 315
第15章 面向?qū)ο箝_發(fā)實(shí)例
15.1 面向?qū)ο笤O(shè)計(jì)概述 316
15.2 對(duì)象的靜態(tài)模型 317
15.3 面向?qū)ο蟮姆治觥?19
15.4 對(duì)象的設(shè)計(jì)與實(shí)現(xiàn) 320
15.5 骰子游戲模型設(shè)計(jì)實(shí)例 322
15.5.1 問題描述 322
15.5.2 對(duì)象模型 322
15.5.3 對(duì)象設(shè)計(jì) 324
15.6 游戲模型程序設(shè)計(jì) 326
練習(xí)題 331
參考文獻(xiàn) 338