第1部分 基础篇 2
第1章 初识C++程序 2
1.1 编写一个简单的C++程序 2
1.2 认识类 4
1.3 编译与调试程序 6
习题1 7
第2章 基本数据类型和表达式 8
2.1 C++语句基本元素 8
2.1.1 标识符 8
2.1.2 关键字 8
2.2 基本数据类型 9
2.2.1 内置类型 10
2.2.2 常量 11
2.3 对象 12
2.3.1 对象的定义和初始化 13
2.3.2 对象的声明 14
2.3.3 作用域和生命期 14
2.4 常量修饰符和类型推导 16
2.4.1 const修饰符 16
2.4.2 constexpr和常量表达式 16
2.4.3 类型推导 17
2.5 表达式 18
2.5.1 基本知识 19
2.5.2 算术运算符 20
2.5.3 赋值运算符 21
2.5.4 自增和自减运算符 22
2.5.5 逻辑和关系运算符 22
2.5.6 逗号运算符 24
2.5.7 条件运算符 24
2.5.8 sized运算符 24
2.5.9 位运算符 25
2.5.10 求值次序 26
2.6 类型转换 26
2.6.1 隐式类型转换 26
2.6.2 显式类型转换 27
习题2 27
第3章 语句控制结构 30
3.1 语句 30
3.1.1 空语句 30
3.1.2 复合语句 30
3.1.3 控制结构语句作用域 31
3.2 分支结构 31
3.2.1 if语句 31
3.2.2 switch语句 35
3.3 循环结构 36
3.3.1 while语句 37
3.3.2 do while语句 38
3.3.3 for语句 38
3.3.4 循环语句的选择 39
3.4 跳转语句 41
3.4.1 break语句 41
3.4.2 continue语句 42
3.5 嵌套结构和应用实例 42
习题3 45
第4章 复合类型、string和vector 47
4.1 引用 47
4.1.1 引用const对象 48
4.1.2 auto和引用 48
4.1.3 decltype和引用 49
4.1.4 右值引用 49
4.2 指针 50
4.2.1 指针的定义 50
4.2.2 改变指向 52
4.2.3 const和指针 52
4.2.4 类型推导和指针 53
4.2.5 void指针 53
4.2.6 多级指针 54
4.2.7 引用和指针 54
4.3 数组 55
4.3.1 数组的定义和初始化 55
4.3.2 访问数组元素 57
4.3.3 多维数组 60
4.4 指针和数组 63
4.4.1 指针指向数组 63
4.4.2 利用指针访问数组 64
4.5 string类型 66
4.5.1 string类型常用操作 67
4.5.2 C风格字符串 70
4.6 vector类型 71
4.6.1 定义和初始化vector对象 71
4.6.2 vector类型常用操作 72
4.6.3 使用迭代器 72
4.7 枚举类型 76
4.7.1 定义枚举类型 76
4.7.2 使用枚举类型 77
习题4 77
第5章 函数 81
5.1 认识函数 81
5.1.1 定义函数 81
5.1.2 调用函数 82
5.1.3 调用规则 82
5.1.4 无参列表和void返回类型 83
5.1.5 函数声明 83
5.2 局部对象和全局对象 84
5.2.1 存储周期 84
5.2.2 局部对象 84
5.2.3 全局对象 85
5.3 参数传递 87
5.3.1 值传递 87
5.3.2 引用传递 89
5.3.3 const形参 89
5.3.4 数组形参 90
5.4 返回值类型 92
5.4.1 无值返回 92
5.4.2 有值返回 93
5.5 函数重载和特殊用途的函数 95
5.5.1 函数重载 95
5.5.2 默认参数 95
5.5.3 内联函数 96
5.5.4 constexpr函数 97
5.6 函数指针和lambda表达式 98
5.6.1 函数指针 98
5.6.2 lambda表达式 101
5.7 递归调用 102
5.7.1 递推和回归 102
5.7.2 递归和循环 104
5.8 编译预处理和多文件结构 106
5.8.1 宏定义 106
5.8.2 条件编译 108
5.8.3 多文件结构 108
习题5 110
第6章 类 114
6.1 类的定义 114
6.1.1 定义一个类 114
6.1.2 定义和使用成员函数 115
6.1.3 定义辅助函数 117
6.1.4 访问控制 117
6.1.5 友元 118
6.2 构造函数与析构函数 119
6.2.1 默认构造函数 120
6.2.2 复制构造函数 122
6.2.3 析构函数 125
6.3 运算符重载 125
6.3.1 基本概念 125
6.3.2 重载原则 127
6.3.3 输入和输出运算符 128
6.3.4 递增和递减运算符 129
6.3.5 函数调用运算符 130
6.3.6 类型转换运算符 130
6.4 静态成员 131
6.4.1 声明静态成员 131
6.4.2 使用静态成员 132
6.5 类成员指针 133
6.5.1 数据成员指针 133
6.5.2 成员函数指针 133
习题6 134
第2部分 设计篇 138
第7章 模板与泛型编程 138
7.1 函数模板 138
7.1.1 定义函数模板 138
7.1.2 实例化函数模板 139
7.1.3 模板参数类型 140
7.1.4 类成员模板 142
7.1.5 可变参函数模板 142
7.2 类模板 144
7.2.1 成员函数定义 145
7.2.2 实例化类模板 146
7.2.3 默认模板参数 146
7.3 排序与查找 147
7.3.1 排序算法 147
7.3.2 二分查找算法 150
习题7 151
第8章 动态内存与数据结构 153
8.1 动态内存 153
8.1.1 创建动态对象 153
8.1.2 释放动态内存 154
8.1.3 内存泄漏 154
8.1.4 智能指针 155
8.1.5 动态数组 157
8.2 拷贝控制① 158
8.2.1 简单字符串类 158
8.2.2 复制与赋值 160
8.2.3 移动对象 161
8.3 线性链表 162
8.3.1 链表表示 163
8.3.2 插入操作 164
8.3.3 删除操作 165
8.3.4 清空链表 166
8.3.5 打印链表 166
8.3.6 拷贝控制与友元声明 167
8.4 链栈 167
8.4.1 链栈表示与操作 168
8.4.2 简单计算器 169
8.5 二叉树 172
8.5.1 二叉树的概念和表示 172
8.5.2 创建二叉搜索树 174
8.5.3 遍历操作 175
8.5.4 搜索操作 175
8.5.5 销毁操作 176
8.5.6 拷贝控制及友元声明 176
习题8 177
第9章 继承与多态 179
9.1 继承 179
9.1.1 定义基类 179
9.1.2 定义派生类 180
9.1.3 访问控制 181
9.1.4 类型转换 184
9.2 构造、拷贝控制与继承 185
9.2.1 派生类对象的构造 185
9.2.2 拷贝控制与继承 186
9.3 虚函数与多态性 188
9.3.1 虚函数 188
9.3.2 动态绑定 189
9.3.3 抽象类 191
9.3.4 继承与组合 192
9.3.5 再探计算器 194
习题9 197
第10章 简单输入输出 201
10.1 基本知识 201
10.1.1 IO类对象 201
10.1.2 条件状态 202
10.1.3 刷新缓冲区 203
10.2 标准输入输出 203
10.2.1 字符数据的输入 203
10.2.2 格式化控制 204
10.3 文件输入输出与string流 206
10.3.1 使用文件流对象 206
10.3.2 文件模式 206
10.3.3 string流 208
习题10 209
第11章 标准模板库 210
11.1 迭代器 210
11.1.1 实现Find函数模板 210
11.1.2 使用迭代器 212
11.2 容器 213
11.2.1 容器概述 213
11.2.2 顺序容器 215
11.2.3 关联容器 218
11.2.4 高效使用容器 221
11.3 泛型算法 224
11.3.1 算法概述 224
11.3.2 向算法传递函数 226
11.3.3 参数绑定 228
11.3.4 使用function 229
习题11 230
第12章 工具与技术 231
12.1 命名空间 231
12.1.1 定义命名空间 232
12.1.2 使用命名空间 233
12.2 异常处理 234
12.2.1 抛出异常 234
12.2.2 检测异常 235
12.2.3 捕获异常 235
12.2.4 使用标准库异常类 236
12.3 多重继承与虚继承 237
12.3.1 多重继承 237
12.3.2 虚继承 238
12.4 嵌套类 239
12.4.1 二维数组类 239
12.4.2 通用计算器 240
12.5 运行时类型识别 243
12.5.1 dynamic_cast运算符 243
12.5.2 typeid运算符 244
12.6 union类型 245
12.6.1 定义union类型 245
12.6.2 使用union类型 245
12.7 标准库特殊工具 246
12.7.1 tuple类型 246
12.7.2 bitset类型 247
12.7.3 日期和时间 248
习题12 249
附录A ASCII字符表 251
附录B 运算符优先级表 252
附录C 标准库算法 253
参考文献 265