第一章 绪论 1
1.1 综述 1
1.2 面向对象程序设计 2
1.3 面向对象问题解 3
1.4 类、对象和封装 4
1.5 子类——继承性和多态性 6
1.6 面向对象程序设计的挑战 6
1.6.1 划分软件为类 6
1.6.2 对已存的软件系统增加功能 7
1.6.3 类型和子类型的层次结构 7
1.6.4 应改变典型软件开发过程 8
1.6.5 对“算法+数据结构=程序设计”的挑战 8
1.7 面向对象方法 9
1.7.1 什么是面向对象? 9
1.7.2 面向对象开发方法 11
1.7.3 面向对象方法学 11
1.7.4 三种模型 12
1.7.5 小结 13
第二章 从C语言如何过渡到C++语言 14
2.1 C++语言:一个正在演变的语言及其发展史 14
2.2 在较小范围内如何将C++增强C 16
2.2.1 注释行 16
2.2.2 枚举名 16
2.2.3 结构体或类名 16
2.2.4 在块(分程序)内说明 17
2.2.5 作用域限定运算符 17
2.2.6 const说明符 17
2.2.7 无名共用体(anonymous unions) 17
2.2.8 显式类型转换 18
2.2.9 函数原型 18
2.2.10 函数名重载 18
2.2.11 函数参数的缺省值 19
2.2.12 具有不确定参数个数的函数 19
2.2.13 函数中引用参数 19
2.2.14 inline说明符 19
2.2.15 new和delete运算符 20
2.2.16 指向void的指针和返回void函数 20
2.3 在较大范围内如何将C++增强C 20
2.3.1 类的构造和数据封装 21
2.3.2 结构是一种特殊类 21
2.3.3 构造函数和析构函数 22
2.3.4 私有、保护和公共部分 22
2.3.5 对象和消息 22
2.3.6 友元(friends) 23
2.3.7 类中运算符和函数名重载 23
2.3.8 导出类 23
2.3.9 虚拟函数 23
2.3.10 流库 24
第三章 快速掌握C++语言 25
3.1 注释行 25
3.2 常量、类型和说明 25
3.3 C++运算符 31
3.4 传递引用 33
3.5 指针 34
3.6 const说明符 40
3.7 void类型 42
3.8 枚举类型 43
3.9 无名共用体(anongmous unions) 44
3.10 显式类型转换 44
3.11 函数 45
3.11.1 函数原型 46
3.11.2 内联(inline)函数 46
3.11.3 缺省自变量 46
3.11.4 重载函数名 47
3.11.5 不确定自变量个数的函数 48
3.11.6 指向函数的指针和类属 48
3.12 C++系统的文件和物理组织 53
第四章 C++环境中的C 54
4.1 函数调用 54
4.2 函数参数表 55
4.3 函数原型 55
4.4 引用型参数 56
4.5 参数个数不定 59
4.6 函数指针 60
4.7 const类型说明符 62
4.8 C代码的接口 64
4.8.1 设计的考虑 64
4.8.2 C语言连接 65
4.8.3 从C调用C++ 66
4.8.4 在C和C++之间共享头文件 67
4.8.5 将C数据输入到C++ 70
4.8.6 C++数据输入到C 70
4.9 操作符引用返回值 72
第五章 数据封装和数据隐藏 74
5.1 过程语言、数据抽象、封装和数据隐藏 74
5.2 C++类 75
5.2.1 C++类的基本概念和实例 76
5.2.2 C++类与C结构 81
5.3 类自引用 83
5.4 构造函数和析构函数 85
5.4.1 一个C++类的栈抽象数据类型的实现 86
5.4.2 用Modula-2实现的栈抽象数据类型 88
5.5 作为成员的类对象 90
5.6 对象向量 92
5.7 友元(friends) 93
5.8 类的静态成员 95
5.9 运算符重载 95
5.9.1 双目和单目运算符 96
5.9.2 运算符重载的两个例子 97
5.9.3 <stream.h>库 108
5.10 几个基本行类 112
5.10.1 类属表 112
5.10.2 用二叉查找树实现类属查找表 117
5.10.3 search-table抽象的C++封装 118
第六章 导出类和继承性 129
6.1 导出类构造 130
6.2 父类有构造函数的导出类 134
6.3 导出类的一些例子 136
6.3.1 导出counter类 136
6.3.2 一个大学的类系统 138
6.3.3 从类属表中导出栈和队列 142
6.4 继承性 145
6.4.1 简单继承 145
6.4.2 范围和访问控制 150
6.4.3 多重继承 158
第七章 多态性和虚拟函数 168
7.1 虚拟函数 169
7.2 生成链表的一个面向对象解 172
7.2.1 异质链表的非多态性解 172
7.2.2 异质链表的面向对象解 178
7.2.3 非面向对象和面向对象系统的维护 186
7.3 多态性的异质查询树 191
7.4 使用多态性构造的有限状态自动机 196
第八章 面向对象模型 202
8.1 对象模型 202
8.1.1 对象图 202
8.1.2 连接和关联 204
8.1.3 高级的连接和关联 206
8.1.4 概括和继承 208
8.2 动态模型 211
8.2.1 事件和状态 212
8.2.2 状态图 215
8.2.3 操作 216
8.2.4 动态模型的实例(程控恒温器) 217
8.2.5 对象模型和动态模型的关系 221
8.3 功能模型 222
8.3.1 数据流图 222
8.3.2 操作 225
8.3.3 约束 227
8.3.4 功能模型的实例(飞行模拟装置) 227
8.3.5 功能模型与对象和动态模型的关系 230
第九章 面向对象设计与实现 231
9.1 分析 231
9.2 系统设计 233
9.2.1 将系统划为分子系统 233
9.2.2 系统设计阶段综述 234
9.2.3 系统设计的几个步骤 235
9.3 对象设计 235
9.3.1 对象设计综述 236
9.3.2 对象设计的步骤 237
9.4 小结 238
第十章 面向对象设计与C++面向对象程序设计典型实例剖析 239
面向对象设计与实现的典型实例剖析 239
10.1 计算机动画 239
10.1.1 动画的制作过程 239
10.1.2 问题叙述 241
10.1.3 分析 242
10.1.4 系统设计 245
10.1.5 对象设计 246
10.1.6 实现 248
10.2 对象图编译 250
10.2.1 问题叙述 251
10.2.2 系统设计 256
10.2.3 对象设计 256
C++与面向对象程序设计典型实例剖析 260
10.3 快速拼写检查程序 260
10.3.1 拼写检查程序的设计说明 260
10.3.2 拼写检查程序的高层设计 260
10.3.3 拼写检查程序的低层设计 263
10.3.4 拼写检查程序的实现 264
10.4 银行出纳员离散事件模拟 275
10.4.1 队列模拟的设计说明 275
10.4.2 队列模拟的高层设计 276
10.4.3 队列模拟的低层设计 281
10.4.4 队列模拟的实现 281
10.4.5 模拟输出 297
10.4.6 队列模拟的维护 300
10.5 交互式函数评价程序 304
10.5.1 函数评价程序的设计说明 304
10.5.2 表达式树的回顾 306
10.5.3 函数评价程序的高层设计 311
10.5.4 函数评价程序的低层设计 316
10.5.5 函数评价程序的全部实现 323
10.6 用C++仿真生态系统 341
10.6.1 人工生命是什么? 341
10.6.2 计算机和生命 342
10.6.3 生态系统仿真的基本说明 342
10.6.4 用C++仿真生态系统实例 343
参考文献 353