绪论 1
第1章 类和对象 2
1.1 面向对象程序设计概述 3
1.2 面向对象方法的基本特征 3
1.2.1 对象和类 3
1.2.2 封装(encapsulation)与数据隐藏 4
1.2.3 继承(inheritance)与重用 5
1.2.4 多态性(polymorphism) 5
1.2.5 消息 5
1.2.6 面向过程与面向对象程序设计方法的比较 6
1.3 类和对象的定义 6
1.3.1 类的定义 7
1.3.2 类对象的定义 9
1.3.3 类对象的内存分配 11
1.4 类的成员函数 11
1.4.1 在类内定义成员函数 11
1.4.2 在类外定义成员函数 12
1.5 对象成员的引用 14
1.6 构造函数和析构函数 19
1.6.1 构造函数的定义 19
1.6.2 构造函数的重载 22
1.6.3 带默认参数的构造函数 24
1.6.4 析构函数 26
1.6.5 拷贝构造函数和默认拷贝构造函数 29
1.7 类和对象的进一步应用 34
1.7.1 堆对象 34
1.7.2 对象数组 35
1.7.3 类对象作为成员 36
1.7.4 面向对象程序中的常量 40
1.8 this指针 43
1.9 静态成员 45
1.9.1 静态数据成员 45
1.9.2 静态成员函数 47
1.10 友元函数和友元类 51
1.10.1 友元函数 51
1.10.2 友元类 55
1.11 综合应用实例 57
习题一 62
第2章 继承与派生 68
2.1 继承与派生的基础知识 69
2.1.1 继承与派生的基本概念 69
2.1.2 派生类的定义 70
2.1.3 派生类的生成 73
2.2 类的继承方式 74
2.2.1 公有继承 74
2.2.2 私有继承 78
2.2.3 保护继承 80
2.2.4 继承方式的总结和比较 80
2.3 派生类的构造函数与析构函数 81
2.3.1 简单派生类的构造函数 81
2.3.2 析构函数 83
2.3.3 复杂派生类的构造函数和析构函数 83
2.4 基类与派生类的转换 86
2.5 多重继承 88
2.5.1 多重继承的定义 88
2.5.2 多重继承中的二义性问题 90
2.6 虚基类 95
2.6.1 虚基类的定义 95
2.6.2 虚基类及其派生类构造函数的执行顺序 98
2.7 综合应用实例 100
习题二 107
第3章 多态性 111
3.1 多态性的概念 112
3.2 运算符重载 112
3.2.1 运算符重载概述 112
3.2.2 运算符重载的实现 113
3.2.3 双目运算符重载 114
3.2.4 赋值运算符重载 117
3.2.5 单目运算符重载 120
3.2.6 下标运算符重载 122
3.2.7 关系运算符重载 124
3.2.8 类型转换运算符重载 125
3.3 联编和虚函数 127
3.3.1 静态联编和动态联编 127
3.3.2 虚函数的引入 127
3.3.3 虚函数的定义 130
3.3.4 动态联编的工作机制 132
3.3.5 虚析构函数 132
3.4 纯虚函数和抽象类 135
3.4.1 纯虚函数 135
3.4.2 抽象类 135
3.5 综合应用实例 138
习题三 144
第4章 输入/输出流 146
4.1 输入/输出流的基本概念 147
4.2 输入/输出流类体系 148
4.2.1 流类库 148
4.2.2 标准流对象 149
4.3 输入/输出流的操作 150
4.3.1 输入/输出流的格式化 150
4.3.2 用流成员函数实现输入/输出 156
4.4 文件流和文件的输入/输出 158
4.4.1 文件流类与文件流对象 158
4.4.2 定义文件流对象 158
4.4.3 文件的打开和关闭 159
4.4.4 文本文件的输入/输出(读/写) 161
4.4.5 二进制文件的输入/输出(读/写) 163
4.4.6 文件的随机访问 165
4.5 字符串流 167
4.6 重载插入和提取运算符 171
4.7 综合应用实例 172
习题四 178
第5章 异常处理 182
5.1 异常的概念与异常的产生 183
5.1.1 异常的概念 183
5.1.2 异常的产生 183
5.2 异常处理机制 183
5.2.1 基本概念 183
5.2.2 throw语句 185
5.2.3 try块 186
5.2.4 catch块 186
5.2.5 异常处理模式 187
5.2.6 重新抛出 188
5.2.7 异常规范 191
5.3 没有被捕捉的异常 192
5.4 catch(...)的使用 194
5.5 用类的对象传递异常 195
5.5.1 以传值方式传递异常对象 196
5.5.2 以引用方式传递异常对象 197
5.5.3 以指针方式传递异常对象 198
5.5.4 异常对象传递方式的比较 199
5.6 标准C++库中的异常类 200
5.7 综合应用实例 201
习题五 204
第6章 模板 205
6.1 函数模板 206
6.1.1 函数模板语法 206
6.1.2 函数模板实例化 207
6.1.3 函数模板和模板函数 208
6.1.4 使用函数模板需要注意的问题 209
6.2 类模板 210
6.2.1 类模板的语法 211
6.2.2 类模板实例化 212
6.2.3 派生类和类模板 214
6.2.4 使用类模板需要注意的问题 215
6.3 综合应用实例 216
习题六 219
第7章 STL(标准模板库)的介绍及应用 221
7.1 STL的概念 222
7.1.1 什么是STL 222
7.1.2 STL与C++标准库的关系 222
7.1.3 STL的组成部分 223
7.1.4 STL对C++的影响 224
7.2 命名空间 224
7.2.1 命名空间的定义 225
7.2.2 命名空间的使用 226
7.2.3 无名空间 227
7.2.4 标准命名空间std 228
7.3 容器(container) 228
7.3.1 容器简介 229
7.3.2 容器的结构 230
7.3.3 容器的使用 233
7.4 迭代器(iterator) 235
7.4.1 输入迭代器 236
7.4.2 输出迭代器 237
7.4.3 前向迭代器 238
7.4.4 双向迭代器 238
7.4.5 随机存取迭代器 239
7.4.6 迭代器的使用 240
7.5 算法(algorithm) 241
7.5.1 算法和函数对象 241
7.5.2 算法分类介绍 243
7.6 综合应用实例 247
习题七 249
第8章 面向对象的程序设计方法与实例 251
8.1 面向对象方法学概述 252
8.2 面向对象的模型 254
8.3 面向对象的程序设计过程 255
8.3.1 面向对象的分析 256
8.3.2 面向对象的设计 257
8.3.3 面向对象的实现 258
8.4 电梯模拟系统 258
8.4.1 需求陈述 258
8.4.2 电梯模拟系统的分析 259
8.4.3 电梯模拟系统的设计与实现 263
习题八 289
附录A 常用容器与算法介绍 290
附录B 统一建模语言(UML) 304
参考文献 310