第1章 编写一个ANSI C++程序 1
1.1 编程准备 1
1.2 第一个程序 2
1.3 问题求解:烹饪法 4
1.4 用C++实现算法 7
1.5 软件工程:风格 8
1.6 常见的编程错误 9
1.7 编写并运行一个C++程序 9
1.7.1 中断程序 11
1.7.2 键入一个文件结束符 11
1.8 Pohl博士的建议 11
1.9 C++与Java的比较 12
小结 13
复习题 14
习题 14
第2章 基本类型和语句 17
2.1 程序元素 17
2.1.1 注释 18
2.1.2 关键字 18
2.1.3 标识符 19
2.1.4 文字 20
2.1.5 运算符和标点符号 21
2.2 输入和输出 21
2.3 程序结构 23
2.4 简单类型 26
2.5 传统的类型转换 28
2.6 枚举类型 30
2.7 表达式 31
2.7.1 运算符的优先级和结合性 32
2.7.2 关系运算符、判等运算符和逻辑运算符 33
2.8 语句 36
2.8.1 赋值和表达式 36
2.8.2 复合语句 37
2.8.3 if和if-else语句 37
2.8.4 while语句 39
2.8.5 for语句 40
2.8.6 do语句 41
2.8.7 break语句和continue语句 42
2.8.8 switch语句 42
2.8.9 goto语句 44
2.9 软件工程:调试 44
2.10 Pohl博士的建议 47
2.11 C++与Java的比较 48
小结 49
复习题 50
习题 51
第3章 函数、指针和数组 54
3.1 函数 54
3.2 函数调用 54
3.3 函数定义 56
3.4 return语句 57
3.5 函数原型 57
3.6 传值调用 58
3.7 递归 59
3.8 默认参数 60
3.9 函数作为参数 62
3.10 重载函数 63
3.11 内联 64
3.12 作用域和存储类型 65
3.12.1 自动存储类型auto 66
3.12.2 外部存储类型extern 66
3.12.3 寄存器存储类型register 67
3.12.4 静态存储类型static 67
3.12.5 头文件和链接的秘密 68
3.13 名字空间 70
3.14 指针类型 71
3.14.1 取地址和解除引用 72
3.14.2 基于指针的引用调用 72
3.15 引用声明 73
3.16 void的用法 75
3.17 数组 75
3.17.1 下标 76
3.17.2 初始化 76
3.18 数组和指针 76
3.19 将数组传递给函数 77
3.20 问题求解:随机数 78
3.21 软件工程:结构化程序设计 80
3.22 核心语言ADT:char*字符串 82
3.23 多维数组 85
3.24 new和delete运算符 87
3.24.1 用向量代替数组 88
3.24.2 用string代替char* 89
3.25 软件工程:程序正确性 90
3.26 Pohl博士的建议 91
3.27 C++与Java的比较 92
小结 93
复习题 94
习题 94
第4章 类和抽象数据类型 100
4.1 聚集类型class和struct 100
4.2 成员选择运算符 101
4.3 成员函数 102
4.4 访问权限:私有和公有 105
4.5 类 106
4.6 类作用域 108
4.6.1 作用域解析运算符 108
4.6.2 嵌套类 109
4.7 示例:五张同花牌 110
4.8 this指针 114
4.9 static成员 115
4.10 const成员 116
4.11 容器类示例:ch_stack 118
4.12 软件工程:类的设计 120
4.12.1 设计中的折中 121
4.12.2 统一建模语言和设计 122
4.13 Pohl博士的建议 122
4.14 C++与Java的比较 123
4.15 高级主题 124
4.15.1 指向类成员的指针 124
4.15.2 联合 125
4.15.3 位域 126
小结 127
复习题 128
习题 128
第5章 构造函数、析构函数、类型转换与运算符重载 132
5.1 带有构造函数的类 133
5.1.1 默认构造函数 134
5.1.2 构造函数初始化式 134
5.1.3 用作类型转换的构造函数 135
5.1.4 改进point类 136
5.1.5 构造栈 137
5.1.6 复制构造函数 139
5.2 带有析构函数的类 141
5.3 类类型成员 141
5.4 示例:单向链表 142
5.5 使用引用语义的字符串 145
5.6 构造函数的问题和秘密 147
5.6.1 析构函数详解 148
5.6.2 构造函数语法 149
5.7 使用函数重载实现多态 149
5.8 ADT转换 150
5.9 重载和签名匹配 150
5.10 友元函数 153
5.11 重载运算符 154
5.12 一元运算符重载 155
5.13 二元运算符重载 157
5.14 重载赋值运算符 158
5.15 重载下标运算符 160
5.16 重载用于索引的()运算符 160
5.17 重载〈〈和〉〉运算符 160
5.18 重载-〉运算符 161
5.19 重载new和delete 163
5.20 更多签名匹配 164
5.21 软件工程:何时使用重载 165
5.22 Pohl博士的建议 166
5.23 C++与Java的比较 167
小结 171
复习题 172
习题 172
第6章 模板与泛型程序设计 177
6.1 模板类stack 179
6.2 函数模板 181
6.2.1 签名匹配与重载 182
6.2.2 如何编写简单函数square() 183
6.3 泛型代码开发:快速排序 184
6.4 类模板 189
6.4.1 友元 189
6.4.2 静态成员 189
6.4.3 类模板参数 190
6.4.4 默认模板参数 190
6.4.5 成员模板 191
6.5 参数化vector类 191
6.6 使用STL的string、vector和complex 193
6.6.1 string和basic_string<> 193
6.6.2 标准模板库中的vector<> 194
6.6.3 使用complex<> 195
6.6.4 limits和其他有用的模板 195
6.7 软件工程:复用和泛型 196
6.7.1 调试模板代码 196
6.7.2 特殊考虑 197
6.7.3 使用typename 198
6.8 Pohl博士的建议 198
6.9 C++与Java的比较 199
小结 201
复习题 201
习题 202
第7章 标准模板库 204
7.1 一个简单STL示例 204
7.2 容器 206
7.2.1 顺序容器 208
7.2.2 关联容器 209
7.2.3 容器适配器 213
7.3 迭代器 215
7.3.1 istream和ostream的迭代器 216
7.3.2 迭代器适配器 218
7.4 算法 219
7.4.1 排序算法 219
7.4.2 不可变序算法 221
7.4.3 变序性算法 223
7.4.4 数值算法 224
7.5 数值积分 226
7.6 STL:函数对象 228
7.6.1 建立函数对象 229
7.6.2 函数适配器 230
7.7 配置器 231
7.8 软件工程:使用STL 231
7.9 Pohl博士的建议 233
7.10 C++与Java的比较 234
小结 234
复习题 234
习题 235
第8章 继承与面向对象程序设计 237
8.1 派生类 238
8.2 学生是人 241
8.3 虚函数:动态限定 243
8.3.1 重载与重写 245
8.3.2 典型示例:shape类 246
8.4 抽象基类 247
8.5 模板与继承 253
8.6 多继承 254
8.7 RTTI以及其他需要注意的问题 255
8.8 软件工程:继承与设计 257
8.8.1 子类型 258
8.8.2 代码复用 258
8.9 Pohl博士的建议 259
8.10 C++与Java的比较 259
小结 261
复习题 262
习题 262
第9章 输入/输出 265
9.1 输出类ostream 265
9.2 格式化输出和iomanip 266
9.3 用户自定义类型的输出 269
9.4 输入类istream 271
9.5 文件 272
9.6 用字符串作为流 274
9.7 ctype中的函数和宏 275
9.8 使用流状态 276
9.9 混合I/O库 277
9.10 软件工程:I/O 278
9.11 Pohl博士的建议 279
9.12 C++与Java的比较 280
小结 281
复习题 282
习题 282
第10章 异常与程序正确性 285
10.1 使用assert库 285
10.2 C++的异常 287
10.3 抛出异常 287
10.3.1 重新抛出异常 289
10.3.2 异常表达式 290
10.4 try块 292
10.5 处理器 292
10.6 将断言转换为异常 293
10.7 异常说明 295
10.8 terminate()和unexpected() 296
10.9 标准异常及其应用 296
10.10 软件工程:异常对象 297
10.11 Pohl博士的建议 299
10.12 C++与Java的比较 299
小结 301
复习题 302
习题 302
第11章 使用C++进行面向对象程序设计 304
11.1 面向对象程序设计语言的特性 304
11.1.1 抽象数据类型:封装和数据隐藏 305
11.1.2 复用和继承 306
11.1.3 多态性 306
11.2 面向对象程序设计:主流程序设计方法 307
11.3 面向对象程序设计思想 312
11.4 类-职责-协作者 313
11.5 设计模式 315
11.6 深入了解C++ 315
11.6.1 C++为什么优于Java 316
11.6.2 C++的不足 316
11.7 软件工程:值得思考的问题 317
11.8 Pohl博士的建议 317
11.9 C++与Java的比较 318
小结 322
复习题 323
习题 323
附录A ASCII字符编码 325
附录B 运算符的优先级与结合性 326
附录C 字符串库 327
附录D tio库(图灵网站下载)索引 332