第1章 起步走 1
1.1 创建“Hello World”程序 1
1.2 代码的含义 5
1.3 第二个程序:空Playpen 6
1.4 代码的含义 9
1.5 其他尝试 10
1.6 总结 10
第2章 基础类型、操作符和简单变量 11
2.1 一个简单的程序 11
2.2 什么是类型 12
2.3 何谓基础类型 14
2.4 负整数的表示 14
2.5 派生类型 15
2.6 声明和定义 16
2.7 C++中的名字 17
2.8 操作符 18
2.9 一个简单的程序 18
2.10 异常——处理无效的输入 20
2.11 编写正确的代码 21
2.12 在处理异常前获得输出 21
2.13 再谈一点Playpen 22
2.14 默认的Playpen颜色名字 25
2.15 字符和文本 25
2.16 浮点数 27
2.17 第一个浮点程序 28
2.18 参考 30
第3章 循环和决策 40
3.1 一些库类型 40
3.2 决策 42
3.3 循环 47
3.4 关于魔数 55
3.5 参考 57
第4章 命名空间和C++标准库 60
4.1 宽字符集支持vs.窄字符集支持 60
4.2 命名空间 60
4.3 从std::cin输入 65
4.4 用std::cout输出 67
4.5 标准控制台输出对象 67
4.6 Playpen绘图模式 68
4.7 进一步的实践 69
4.8 参考 69
第5章 用C++编写函数 73
5.1 C++函数的概念 73
5.2 按其他顺序排列 74
5.3 设计函数 75
5.4 C++过程 80
5.5 纯函数 80
5.6 重载函数 81
5.7 重置istream和ostream对象 84
5.8 匿名参数 91
5.9 分别编译和头文件 92
5.10 参考 94
第6章 行为、序列点和求值顺序 97
6.1 行为的类型 97
6.2 序列点 101
6.3 求值顺序 103
6.4 方针 104
第7章 泛型函数 106
7.1 哪个值较大 106
7.2 获取最大值 108
7.3 使用typedef获取最大值 108
7.4 使用模板获取最大值 110
7.5 二义性 112
7.6 函数模板特化 114
7.7 特化max() 115
7.8 重载函数模板 116
7.9 C++迭代器 118
7.10 使用了迭代器的max(std::vector)版本 119
7.11 fgw::read函数模板 120
7.12 参考 124
第8章 用户自定义类型,第1部分:typedef和enum 127
8.1 typedef:旧类型的新名字 127
8.2 阅读声明 129
8.3 enum 131
8.4 操作符重载 134
8.5 参考 139
第9章 用户自定义类型,第2部分:简单类(值类型) 141
9.1 ISBN作为一个class类型 142
9.2 测试代码 146
9.3 重载操作符 147
9.4 扑克牌的值类型 148
9.5 public vs.private 149
9.6 特殊成员函数:构造函数 150
9.7 特殊成员函数:析构函数 151
9.8 特殊成员函数:复制赋值operator= 151
9.9 普通成员函数 151
9.10 实现构造函数 152
9.11 实现析构函数 153
9.12 实现复制赋值operator= 153
9.13 实现成员函数 154
9.14 分别编译 154
9.15 发展card_value类型 158
9.16 改变实现 160
9.17 指针和数组 162
9.18 巩固——点类 165
9.19 在类定义中定义成员函数 167
9.20 参考 167
第10章 用户自定义类型,第3部分:简单类(同质实体类型) 172
10.1 值类型和实体类型的例子 172
10.2 一个简单的扑克牌实体 173
10.3 另一个实体类型:一副牌 175
10.4 deck的输出 178
10.5 从文件创建deck实例 180
10.6 参考 183
第11章 指针、智能指针、迭代器和动态实例 184
11.1 原始指针 184
11.2 危险的特殊情况 186
11.3 数组 187
11.4 数组和指针 188
11.5 动态实例 190
11.6 智能指针 195
11.7 迭代器 197
11.8 参考 198
第12章 用户自定义类型,第4部分:类层次结构、多态、继承和子类型 201
12.1 国际象棋棋子的接口 202
12.2 实现basic_chesspiece 204
12.3 实现马(knight) 208
12.4 获得多态行为 211
12.5 获得身份 212
12.6 移除刺激物 212
12.7 移动至被占据的方格 213
12.8 另一个棋子 213
12.9 参考 216
第13章 动态对象创建和多态对象 218
13.1 在运行期选择子类型 218
13.2 匿名命名空间 219
13.3 一个棋子类型 222
13.4 实现chesspiece 224
13.5 定义和实现子类型 226
13.6 构造特定的棋子 229
13.7 chesspiece构造函数和transform() 229
13.8 实现chesspiece的其余部分 230
13.9 对象的集合 233
13.10 chessboard类型的设计和实现 233
13.11 参考 234
第14章 流、文件和持久性 236
14.1 C++流层次结构 236
14.2 追加数据 239
14.3 巩固 240
14.4 字符串流 240
14.5 将数字值转换为字符串 241
14.6 持久性 243
14.7 将文本转换为枚举成员 244
14.8 参考 246
第15章 异常 249
15.1 什么是异常 249
15.2 可抛出的异常类型 251
15.3 异常安全的复制赋值惯用法 256
15.4 重新抛出异常 257
15.5 异常规范:失败的思想 258
15.6 异常与析构函数 258
15.7 参考 258
第16章 重载操作符和转换操作符 260
16.1 为算术类型重载操作符 260
16.2 转换操作符 264
16.3 函数对象 266
16.4 结论 268
16.5 参考 269
第17章 容器、迭代器和算法 270
17.1 使用Set 271
17.2 使用数值算法 276
17.3 使用Multimap 278
17.4 预载容器 280
17.5 结论 281
17.6 参考 281
第18章 温故知新 284
18.1 代码布局和一致性 284
18.2 const放在哪里 285
18.3 函数风格初始化vs.赋值风格初始化 286
18.4 使用using 289
18.5 关闭多态 290
18.6 操作符的替代拼写法 290
18.7 匈牙利命名法 291
18.8 常量的名字 291
18.9 注释 291
18.10 结构中的多出口 292
18.11 重构和对象的威力 293
18.12 使用遗留库 297
18.13 最后的话 299
附录A 前言往行 300
参考文献 317