C++程序設計語言——現代C++(23標準)
龐雄文、李鄉儒、張金區
商品描述
目錄大綱
目錄
第1章C++概述/1
1.1計算機與程序的關系/1
1.2C++語言全景/2
1.3二進制編碼/3
1.3.1比特與整數的表示(原碼、反碼、補碼)/3
1.3.2小數(浮點數)的二進制表達/4
1.3.3八進制與十六進制/5
習題1/5
第2章第一個C++程序/7
2.1C++程序的基本組成/7
2.1.1註釋/8
2.1.2文件包含預處理指令#include/8
2.1.3模塊導入import/8
2.1.4main()函數/9
2.1.5輸入輸出流/9
2.2C++程序的編譯和執行/10
2.2.1程序編譯/10
2.2.2鏈接/10
習題2/11
第3章C++語言基礎/12
3.1字符集和詞法標記/12
3.1.1字符集/12
3.1.2詞法標記/133.1.3文本(字面量)/15
3.1.4語句/18
3.2基本數據類型、變量/18
3.2.1基本數據類型/18
3.2.2固定寬度數據類型/20
3.2.3數據類型別名/21
3.2.4字符串類std::string和std::string_view/21
3.2.5變量的定義和使用/24
3.3運算符與表達式/26
3.3.1算術運算符和算術表達式/26
3.3.2賦值運算符/28
3.3.3關系(比較)運算符/29
3.3.4邏輯運算符/31
3.3.5位運算符/32
3.3.6條件運算符、逗號運算符和sizeof運算符/33
3.3.7運算符的優先級和結合性/35
3.3.8隱式類型轉換/36
3.3.9顯式(強制)類型轉換/38
3.4選擇結構/39
3.4.1if語句/39
3.4.2ifelse語句/39
3.4.3帶初始化語句的if語句(C++23標準)/40
3.4.4constexpr if語句(C++17標準)/41
3.4.5switch語句/41
3.5循環結構/43
3.5.1for循環/43
3.5.2rangefor循環/44
3.5.3while循環/45
3.5.4dowhile循環/46
3.5.5跳轉語句/46
3.5.6循環結構的使用/48
3.5.7循環使用例子——計算π的值/48
3.6基本輸入輸出/49
3.6.1標準輸出/49
3.6.2標準輸入/49
3.7常量的定義和使用/50
3.7.1宏定義/50
3.7.2const關鍵字/50
3.7.3constexpr關鍵字/51
習題3/51
第4章指針和數組/53
4.1C++程序的內存模型/53
4.1.1變量和變量地址/53
4.1.2操作內存地址/55
4.2指針的定義和使用/56
4.2.1指針變量的定義/56
4.2.2指針變量的使用/56
4.2.3指針的類型轉換/60
4.3引用的定義和使用/61
4.4數組的定義和使用/62
4.4.1一維數組的定義和使用/62
4.4.2二維數組的定義和使用/64
4.4.3一維數組和二維數組的使用案例/65
4.4.4std::array/65
4.5指針和數組的對偶性/67
4.5.1數組就是指針/67
4.5.2指針的算術運算/68
4.5.3指針和二維數組/69
4.6指針與動態存儲分配/70
4.6.1動態存儲分配/70
4.6.2動態存儲分配存在的問題/72
4.6.3std::vector/73
4.7智能指針/74
4.7.1對象所有權/74
4.7.2unique_ptr——獨占所有權的智能指針/74
4.7.3shared_ptr——共享所有權的智能指針/76
4.7.4weak_ptr——弱引用的智能指針/78
4.8字符指針和字符數組/79
4.8.1字符指針/79
4.8.2字符數組/80
習題4/80
第5章函數/82
5.1函數的定義、聲明和調用/82
5.1.1函數的定義/825.1.2函數的聲明/83
5.1.3函數的調用/85
5.2參數傳遞/88
5.2.1值傳遞/88
5.2.2引用傳遞/89
5.2.3指針傳遞/89
5.2.4數組作為函數的形參/90
5.3返回值/91
5.3.1返回單個值/91
5.3.2使用std::tuple返回多個值/92
5.3.3返回值類型自動推導/93
5.4函數重載/94
5.5函數遞歸/95
5.5.1典型的遞歸應用——漢諾塔問題/96
5.5.2函數遞歸的優化/97
5.6函數指針/98
5.6.1函數指針的定義/98
5.6.2函數指針的賦值/98
5.6.3通過函數指針調用函數/99
5.6.4函數指針作為函數參數和返回值/99
5.6.5使用std::function代替函數指針/99
5.7Lambda表達式/100
習題5/102
第6章結構體及應用/104
6.1概述/104
6.2結構體類型/105
6.2.1結構體類型的定義/105
6.2.2使用結構體類型/106
6.2.3訪問結構體變量的成員/107
6.2.4位域和位向量/109
6.2.5C++對struct關鍵字的擴展/109
6.3結構體的典型應用——鏈表/109
6.3.1插入數據創建鏈表/110
6.3.2鏈表和數組的區別/111
6.4枚舉/112
6.4.1無作用域枚舉/112
6.4.2有作用域枚舉/113
6.5聯合體/113
習題6/114
第7章程序的組織、異常和預處理/116
7.1命名空間/116
7.2變量的作用域和存儲期/118
7.2.1變量的作用域/118
7.2.2全局變量和局部變量/119
7.2.3變量的存儲期/119
7.3異常處理/121
7.3.1trycatch語句/121
7.3.2throw——拋出異常/122
7.3.3未定義行為/123
7.4預處理指令/124
7.4.1文件包含指令/124
7.4.2宏定義和替換/124
7.4.3條件編譯指令/126
7.4.4編譯控制指令/126
習題7/127
第8章類與對象/129
8.1面向對象程序設計的基本特點/129
8.2定義和使用類/132
8.2.1類的定義/132
8.2.2使用類——對象/133
8.2.3前置聲明/134
8.2.4非靜態數據成員/134
8.2.5非靜態成員函數/137
8.2.6嵌套類/142
8.2.7類的定義和實現分離/143
8.3類的特殊成員函數/144
8.3.1構造函數/145
8.3.2析構函數/152
8.3.3賦值運算符函數/153
8.3.4類型轉換函數/154
8.3.5臨時對象/156
8.4類的靜態成員/1568.4.1靜態數據成員/156
8.4.2靜態成員函數/158
8.5友元/158
8.6對象成員/160
8.7類的設計實例/161
8.7.1簡單類(學生類)的設計/161
8.7.2復雜類(讀取Excel表格)的設計/164
習題8/165
第9章運算符重載/167
9.1運算符重載的定義/167
9.1.1運算符重載的意義和使用場景/167
9.1.2運算符重載的語法/168
9.2單目運算符重載/170
9.3雙目運算符重載/172
9.4特殊運算符重載/173
9.4.1operator new和operator delete/173
9.4.2operator++和operator--/173
9.4.3operator[]/175
9.4.4默認比較運算符(C++20標準之後)/175
9.4.5operator=/177
9.4.6operator()/177
9.4.7operator<<和operator>>/177
9.5案例——大整數類/178
9.5.1類的目標和設計/178
9.5.2示例代碼(僅類定義,實現不完整)/179
習題9/181
第10章繼承和多態/183
10.1類之間的關系/183
10.2派生類的定義和使用/186
10.2.1派生類的定義/186
10.2.2繼承方式/189
10.2.3使用派生類/190
10.3派生類的構造函數和析構函數/195
10.3.1構造函數的調用方法/195
10.3.2基類構造函數的鏈式調用/19610.3.3using聲明和繼承構造函數/197
10.3.4復制構造函數/198
10.3.5析構函數/199
10.3.6delete基類構造函數和析構函數/199
10.4重復繼承和虛基類/200
10.4.1重復(菱形、鉆石)繼承/200
10.4.2虛基類/200
10.4.3虛基類和虛基類共存規則/201
10.4.4虛基類構造函數的調用/201
10.5虛函數和多態/203
10.5.1編譯時多態/203
10.5.2運行時多態/204
10.5.3多態的實現機制(擴展)/207
10.6純虛函數和抽象類/208
10.6.1純虛函數/208
10.6.2抽象類/208
10.7案例/209
10.7.1高斯消元法求解線性方程/209
10.7.2圖形類及其派生類/212
習題10/213
第11章泛型編程和模板/215
11.1泛型編程和模板 /215
11.1.1泛型編程/215
11.1.2模板/216
11.2函數模板 /217
11.2.1函數模板的定義/218
11.2.2函數模板的顯式實例化/219
11.2.3函數模板的隱式實例化/221
11.3類模板/222
11.3.1類模板的定義/222
11.3.2類模板的實例化/224
11.3.3CTAD——類模板參數的自動推導(C++17標準
之後)/225
11.3.4類模板的特化/227
11.3.5類模板的繼承/229
11.3.6成員模板/231
11.3.7CRTP——奇異遞歸模式/236
11.4概念和概念庫(C++20標準之後)/238
11.4.1概念中的約束/239
11.4.2概念/240
11.4.3標準庫中的類型工具/244
11.4.4概念庫中的預定義概念/246
11.5類模板案例/248
習題11/251
第12章輸入與輸出/253
12.1輸入輸出流的概念和結構/253
12.1.1流的概念/253
12.1.2流和緩沖區/254
12.1.3預定義的標準輸入輸出流對象/255
12.2流輸入與輸出/255
12.2.1格式化輸入輸出/255
12.2.2無格式輸入輸出/260
12.2.3cin和cout的重定向/262
12.2.4緩沖區操作/262
12.3文件流/264
12.3.1常用的文件類成員/264
12.3.2文本文件讀寫/266
12.3.3二進制文件讀寫/267
12.4其他類型的輸入輸出/268
12.4.1字符串流/268
12.4.2文件系統(C++17標準之後)/268
12.4.3同步輸出流(C++20標準之後)/271
12.4.4打印函數(C++23標準之後)/272
習題12/273
第13章標準模板庫和範圍/275
13.1STL介紹 /275
13.2STL容器類/276
13.2.1順序容器/277
13.2.2有序關聯容器/281
13.2.3無序關聯容器/286
13.2.4容器適配器/287
13.2.5容器視圖/287
13.3STL疊代器/290
13.3.1標準疊代器/291
13.3.2流疊代器/293
13.4STL算法/295
13.4.1算法示例——copy和copy_if/295
13.4.2不修改序列的算法(批量操作、查找)/298
13.4.3修改序列的算法/299
13.4.4排序、查找和集合算法/300
13.4.5算法使用案例——學生成績管理系統/301
13.5範圍庫/301
13.5.1範圍的概念和定義/302
13.5.2視圖和可視圖化範圍/304
13.5.3範圍適配器/305
13.5.4受約束算法/309
習題13/311
第14章多線程和協程/314
14.1相關基本概念/314
14.1.1並發/314
14.1.2進程/315
14.1.3線程/315
14.1.4協程/317
14.1.5概念總結/318
14.2線程管理/318
14.2.1創建並啟動線程/318
14.2.2線程的加入和分離/320
14.2.3自動加入(join)的線程(jthread) ——C++20標準/321
14.3協程(C++20標準)/322
習題14/324
參考文獻/325







