目录
第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
