4.4.3 抛出异常 7 1
2.4.7 组合程序 3 1
1.1 将C++用做计算器 2
目录 2
第1章 表达式和变量 2
第一部分 C++基础 2
1.2 数字类型 4
1.2.1 浮点数 4
1.2.2 整数 4
1.3 变量 4
1.3.1 声明 5
1.3.2 给变量赋值 6
1.4 常量:const和enum 7
1.4.1 使用const声明 7
1.4.2 使用列举 7
1.5 运算符和简化表示 8
1.5.1 除法和余数 8
1.5.2 逻辑运算符 9
1.5.3 简化表示 10
1.6 字符串 11
1.6.1 string类型 11
1.6.2 连接字符串 11
1.6.3 查找和截取子串 12
1.7 输入和输出 12
1.7.1 向out写 13
1.7.2 从cin读取 13
1.7.3 写和读文件 14
1.7.4 从字符串中读 14
1.8 下文预告 15
2.1 定义自己的函数 16
第2章 函数和控制语句 16
2.1.1 数的平方 16
2.1.2 函数解析 17
2.1.3 没有返回值的函数 18
2.1.4 函数的副作用 18
2.2 控制语句 19
2.2.1 if-else语句 19
2.2.2 块 20
2.2.3 while和do-while语句 21
2.2.4 for语句 22
2.2.5 switch语句 24
2.3.1 全局变量 25
2.3.2 局部变量 25
2.3 范围 25
2.4 实例研究:调试和故障跟踪系统 26
2.4.1 说明 27
2.4.2 自顶向下设计 27
2.4.3 自底向上编码 27
2.4.4 添加错误报告 28
2.4.5 丢弃错误文件 29
2.4.6 显示报告 30
2.5 下文预告 33
3.1.1 作为值表的数组 34
第3章 数组与算法 34
3.1 数组 34
3.1.2 初始化数组 35
3.1.3 向函数传递数组 37
3.1.5 查找 38
3.1.4 读取数组 38
3.1.6 插入 39
3.1.7 排序 40
3.2 容器 41
3.2.1 大小可调的数组:std∷vector 41
3.2.2 链接列表:std∷list 43
3.2.3 结合数组:st∷map 44
3.2.4 堆栈和队列 45
3.3.1 通过容器的迭代 47
3.3 迭代器 47
3.3.2 查找项 48
3.3.3 删除和插入 49
3.4 实例研究:计算简单的统计表 49
3.5 实例研究:柱状图 53
3.5.1 柱状图的两个方法 54
3.6 下文预告 56
第4章 程序与库 57
4.1 头文件 57
4.1.1 库 58
4.1.2 字符归类 58
4.2 程序 59
4.2.1 main函数 60
4.2.3 独立编译 61
4.2.2 编译第一个程序 61
4.3 名字空间 64
4.3.1 全局名字空间 64
4.3.2 类似函数放置在同一名字空间 65
4.3.3 std名字空间 66
4.4 防御性编程 67
4.4.1 防弹程序 68
4.4.2 捕获异常 69
4.5 实例研究:颠倒式波兰计算器 72
4.5.1 使用堆栈 72
4.5.2 向RP添加错误检查 74
4.6 下文预告 76
第5章 结构与指针 77
5.1 用户定义的结构 77
5.1.1 仅有数组是不够的 77
5.1.2 定义新类型 77
5.2 向函数传递结构 79
5.2.1 用结构取代大量参数 79
5.2.2 按值传递结构 80
5.2.3 引用类型 80
5.2.4 const引用 81
5.3 结构数组 81
5.3.1 简单数组 81
9.2.4 类型转换 1 82
5.3.2 结构列表和向量 82
5.4 指针 83
5.4.1 用做引用的指针 83
9.3 实例研究:可变数组 1 85
5.4.2 指针指向什么 86
5.4.3 NULL指针 87
5.4.4 将结构写入二进制文件 88
5.4.5 用new和delete分配内存 89
5.5 实例研究:再看错误跟踪程序 91
5.5.1 二进制文件:易读而且易写 91
5.5.2 有关用户 92
5.5.3 写字符串 93
5.5.4 实用程序接口 95
5.5.5 扩展 96
5.6 下文预告 97
6.1 参数的默认值 98
第6章 重载函数和运算符 98
6.2 重载函数 99
6.2.1 sqr() 99
6.2.2 同样操作的不同参数 101
6.2.3 将默认值作为另一种选择 101
6.3 重载运算符 101
6.3.1 加和两个指针 102
6.3.2 运算符函数 102
6.3.3 重载〈〈和〉〉 103
6.4 递归 104
6.4.1 另一种二进制查找 104
6.4.2 为什么阶乘并不“酷” 105
6.4.3 用龟标画树 106
6.5 函数指针 109
6.6 实例研究:使用龟图绘制图形 111
6.6.1 说明 111
6.6.2 表示方式 112
6.6.3 扩展 118
6.7 下文预告 119
7.1.1 在结构中放入函数 122
7.1 成员函数 122
第7章 类 122
第二部分 面向对象的C++ 122
7.1.2 公共和专有成员 124
7.1.3 struct和class 124
7.2.1 保护表示法 125
7.2.2 Date类 125
7.2 封装思想 125
7.2.3 处理2000年问题 127
7.2.4 const方法,this指针和静态方法 128
7.3 构造函数和析构函数 130
7.3.1 类构造函数 130
7.3.2 默认构造函数 131
7.3.3 显式清除 132
7.4 定义为方法的运算符 133
7.4.1 []运算符 133
7.4.2 用方法替代函数 135
7.5 接口与实现 136
7.5.1 创建头文件 136
7.5.2 实现文件 137
7.5.3 分离接口和实现 137
7.6 案例研究:封装一个类以下载Web页 137
7.6.1 使用WinInet API访问Web页 138
7.6.2 封装WinInet 139
7.6.3 进一步的练习 143
7.7 下文预告 143
第8章 继承与虚拟方法 144
8.1 继承的概念 144
8.1.1 扩展一个struct 144
8.1.2 Employee是Person的子集 146
8.1.3 访问控制与派生 148
8.1.4 构造初始化列表 149
8.1.5 类中的常量 150
8.1.6 用类作为异常 151
8.2 多态性 152
8.2.2 动物的层次结构 153
8.2.1 类层次结构 153
8.2.3 虚拟方法 156
8.2.4 抽象类 159
8.3 代码重用 160
8.3.1 可重用的对象和函数 160
8.3.2 使用现有框架 160
8.3.3 YAWL 161
8.3.4 什么时候使用面向对象程序设计 162
8.4 实例研究:再访问绘图程序 163
8.5 下文预告 172
第9章 复制、初始化和赋值 173
9.1.1 初始化与赋值 173
9.1 复制 173
9.1.2 逐成员复制 175
9.1.3 备份构造函数和赋值运算符 175
9.1.4 通过继承复制 178
9.2 对象的使用期限 179
9.2.1 动态创建对象 180
9.2.2 对象的自动析构 181
9.2.3 临时对象 181
9.3.1 可变的引用计数矢量 186
9.3.2 Array类 189
9.4 实例研究:编写XML/HTML 192
9.5 下文预告 200
第10章 模板 201
10.1 基本函数 201
10.1.1 重访sqr() 201
10.1.2 特殊化 203
10.1.3 使用标准容器 204
10.2 按任何序列操作的函数 206
10.2.1 序列和 for_each() 206
10.2.2 标准算法 206
10.2.3 类似于函数的对象 207
10.3.1 参数化类 208
10.3 类模板 208
10.3.2 作为类模板的标准容器 212
10.3.3 生成模板类的模板函数 214
10.3.4 将模板接口与实现分开 215
10.3.5 成员模板 216
10.4 实例研究:灵活的指针 217
10.5 下文预告 219
第三部分 附录 222
附录A UCW命令参考 222
附录B 库的简短参考 230
附录C C++预处理器 257
附录D 用GCC和BCC32编译C++程序和DLL 264