本書結(jié)合C++程序,簡要介紹了匯編語言,并以棧和隊列為主線,逐步深入面向?qū)ο蟮母拍睢1緯鴱拿嫦蜻^程轉(zhuǎn)向面向?qū)ο蟮木幊涕_始,接著引入類、內(nèi)聯(lián)、線程、異常、虛函數(shù)、運算符重載、移動語義等概念實現(xiàn)棧和隊列,然后基于繼承和聚合等概念通過雙棧模擬隊列,最后引入類模板、類型轉(zhuǎn)換、類型推導(dǎo)等概念實現(xiàn)棧和隊列,深入細致地介紹了ISO/IEC 14882:2017標準的全部語法。
為了培養(yǎng)學(xué)生面向?qū)ο蟮慕D芰,書中按照面向(qū)ο蟮姆治雠c設(shè)計步驟,完整展示了骰子游戲的建模過程,并用C++進行了面向?qū)ο蟮某绦蛟O(shè)計。全書通過挖掘C++概念的應(yīng)用背景,提供了可供運行的有趣實例和習(xí)題。
1.作者為華中科技大學(xué)C++課程組組長
2.全書內(nèi)容便于讀者自學(xué)
3.注重實用性和系統(tǒng)性,內(nèi)容循序漸進、深入淺出,以常見易懂的棧和隊列為主線,逐步介紹面向?qū)ο蟮乃枷牒透拍睿沂久嫦驅(qū)ο笏枷氲纳羁虄?nèi)涵,并給出了應(yīng)用相關(guān)概念的完整程序?qū)嵗?br>4.為了使讀者能夠掌握面向?qū)ο蟮姆治觥⒃O(shè)計與編程方法,本書還完整地展示了骰子游戲的面向?qū)ο蠼<霸O(shè)計過程,并用C++語言進行了面向?qū)ο蟮某绦蛟O(shè)計
5.本書給出了豐富的例題和習(xí)題,最后一章習(xí)題可用于課程設(shè)計,能同時提高讀者的數(shù)學(xué)建模能力,以及面向?qū)ο蟮慕D芰?br>6.本書推薦使用Microsoft Visual Studio 2019編譯環(huán)境
馬光志,湖北鐘祥人,博士,副教授。先后在美國North Illinois University、Kennesaw State University培訓(xùn)及訪問。主要研究方向為人工智能、圖像處理、深度學(xué)習(xí),曾在國際期刊發(fā)表SCI論文20篇、國際會議發(fā)表論文10篇。主持與參加了近30個研究開發(fā)項目,包括國家自然科學(xué)基金、省自然科學(xué)基金、國家863及973、國家重大研發(fā)計劃、中英國際合作及中加國際合作項目,以及與醫(yī)學(xué)圖像、醫(yī)院信息、衛(wèi)生監(jiān)管等相關(guān)的多個研究開發(fā)項目。曾參加C語言至8086匯編語言編譯器的研究與開發(fā)項目,出版與C++及匯編語言相關(guān)的教材3部。
第1章 C++引論
1.1 計算機的體系結(jié)構(gòu) 1
1.1.1 計算機系統(tǒng)的結(jié)構(gòu) 1
1.1.2 數(shù)據(jù)與程序的存儲方式 3
1.2 進制及其轉(zhuǎn)換和運算 4
1.2.1 計算機采用二進制的原因 5
1.2.2 C++的常用進制及其運算 5
1.3 80X86系列匯編語言 7
1.3.1 匯編語言及C++編譯簡介 7
1.3.2 匯編指令及C++程序編譯 9
1.4 C++的發(fā)展歷史及特點 12
1.4.1 C++的發(fā)展歷史 12
1.4.2 C++的特點 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 強制類型轉(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 元素、下標及數(shù)組 47
2.4 運算符及表達式 49
2.4.1 位運算與等號運算 49
2.4.2 指針運算及其結(jié)合方向 50
2.4.3 關(guā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è)計
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è)計實例 84
3.5.1 棧編程實例 84
3.5.2 隊列編程實例 86
3.5.3 有限自動機編程實例 87
練習(xí)題 90
第4章 C++的類
4.1 類的聲明及定義 92
4.1.1 面向?qū)ο蟮幕靖拍睢?2
4.1.2 類及對象定義的實例 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 無對象的匿名聯(lián)合 101
4.3.3 局部類及位段成員 102
4.4 new和delete運算符 103
4.4.1 簡單類型及單個對象內(nèi)存管理 103
4.4.2 復(fù)雜類型及對象數(shù)組內(nèi)存管理 105
4.5 隱含參數(shù)this 107
4.6 對象的構(gòu)造與析構(gòu) 109
4.6.1 構(gòu)造函數(shù)及對象初始化 109
4.6.2 成員默認值及構(gòu)造與析構(gòu) 110
4.7 類及對象的內(nèi)存布局 112
練習(xí)題 116
第5章 成員及成員指針
5.1 實例成員指針 117
5.1.1 實例成員指針的用法 117
5.1.2 實例成員指針的限制 118
5.2 const、volatile和mutable 119
5.2.1 const和volatile的用法 119
5.2.2 mutable實例數(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 對象構(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 使用名字空間的注意事項 158
7.3 成員友元 160
7.3.1 成員友元的一般用法 161
7.3.2 互為依賴的類的友元 162
7.4 普通友元及其注意事項 163
7.4.1 普通友元的一般用法 163
7.4.2 友元使用的注意事項 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)用實例 187
8.5 虛函數(shù)友元與晚期綁定 189
8.5.1 虛函數(shù)作為友元 190
8.5.2 虛函數(shù)的晚期綁定 191
8.6 有虛函數(shù)時的內(nèi)存布局 192
8.6.1 基類有虛函數(shù)時的內(nèi)存布局 192
8.6.2 基類無虛函數(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 無虛基類時的成員同名 200
9.3.2 有虛基類時的成員同名 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 無虛基類時的內(nèi)存布局 205
9.5.2 有虛基類時的內(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 異常對象的析構(gòu) 220
10.5.1 通過對象指針析構(gòu) 220
10.5.2 未完成對象的析構(gòu) 221
10.6 斷言 223
練習(xí)題 224
第11章 運算符重載
11.1 運算符概述 225
11.1.1 結(jié)果為左值的運算符 225
11.1.2 運算符重載的分類 226
11.1.3 成員與非成員重載 227
11.2 運算符參數(shù) 228
11.2.1 自增與自減的重載 228
11.2.2 重載->運算符 230
11.2.3 單雙目運算符的重載 231
11.3 賦值與調(diào)用 232
11.3.1 賦值運算符的重載 232
11.3.2 構(gòu)造函數(shù)的重載 233
11.3.3 安全的編程方法 235
11.4 強制類型轉(zhuǎn)換 236
11.4.1 單個顯式參數(shù)構(gòu)造函數(shù) 236
11.4.2 強制類型轉(zhuǎn)換重載函數(shù) 237
11.5 重載new和delete 238
11.6 運算符重載實例 240
11.6.1 符號表運算的重載實例 240
11.6.2 棧及隊列運算重載實例 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——動態(tài)轉(zhuǎn)換 260
12.2.4 reinterpret_cast——重釋轉(zhuǎn)換 263
12.3 類型轉(zhuǎn)換實例 265
12.3.1 typeid獲取類型標識 265
12.3.2 explicit要求顯式調(diào)用 267
12.3.3 棧的類型轉(zhuǎn)換實例 268
12.4 自動類型推導(dǎo) 270
12.4.1 auto的一般用法 271
12.4.2 auto用于函數(shù)和數(shù)組 271
12.4.3 表達式類型的提取 272
12.5 Lambda表達式 273
12.5.1 Lambda表達式的聲明 273
12.5.2 Lambda表達式的參數(shù) 275
12.5.3 準函數(shù)Lambda表達式 278
練習(xí)題 279
第13章 模板與內(nèi)存回收
13.1 變量模板及其實例 280
13.1.1 變量模板的定義 280
13.1.2 變量模板的實例化 281
13.2 函數(shù)模板 282
13.2.1 函數(shù)模板的定義 282
13.2.2 成員函數(shù)模板的定義 283
13.2.3 函數(shù)模板的參數(shù) 284
13.3 函數(shù)模板實例化 285
13.3.1 函數(shù)模板強制實例化 285
13.3.2 函數(shù)模板實例特化 286
13.3.3 涉及指針的模板實例化 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表達式 292
13.5 類模板的實例化及特化 294
13.5.1 類模板的實例化 294
13.5.2 類模板實例特化 294
13.5.3 類模板的部分特化 296
13.5.4 實例化與類型推導(dǎo) 297
13.5.5 類模板及實例成員指針 298
13.5.6 模板分隔符的二義性 299
13.5.7 類模板與泛型 300
13.6 內(nèi)存回收實例 303
練習(xí)題 305
第14章 流及類庫
14.1 流類概述 307
14.2 輸出流 308
14.3 輸入流 311
14.4 文件流 312
14.5 串流處理 314
練習(xí)題 315
第15章 面向?qū)ο箝_發(fā)實例
15.1 面向?qū)ο笤O(shè)計概述 316
15.2 對象的靜態(tài)模型 317
15.3 面向?qū)ο蟮姆治觥?19
15.4 對象的設(shè)計與實現(xiàn) 320
15.5 骰子游戲模型設(shè)計實例 322
15.5.1 問題描述 322
15.5.2 對象模型 322
15.5.3 對象設(shè)計 324
15.6 游戲模型程序設(shè)計 326
練習(xí)題 331
參考文獻 338