目录 1
第一章 绪论 1
1.1 综述 1
1.2 面向对象程序设计 1
1.3 面向对象问题解 2
1.4 类、对象和封装 3
1.5 子类——继承性和多态性 5
1.6.3 类型和子类型的层次结构 6
1.6.2 对已存的软件系统增加功能 6
1.6.1 划分软件分类 6
1.6 面向对象程序设计的挑战 6
1.6.4 应改变典型软件开发过程 7
1.6.5 对“算法+数据结构=程序设计”的挑战 7
第二章 C语言程序设计 9
2.1 C语言历史和特点 9
2.2 用C语言开始编写程序 10
2.2.1 C语言程序开发的基本过程 10
2.2.2 用C语言编写程序 11
2.3.1 变量 13
2.3 变量、常数、数据类型和算术表达式 13
2.3.2 基本数据类型和常数 14
2.3.3 算术运算符、赋值算符和算术表达式 16
2.4 控制流语句 18
2.4.1 基本运算 18
2.4.2 条件语句 19
2.4.3 复合语句 20
2.4.4 开关语句 20
2.4.5 while及do-while循环语句和for循环语句 21
2.4.6 break和continue语句 23
2.5 函数 25
2.5.1 库函数 26
2.5.2 函数定义和函数调用 28
2.5.3 自动变量和外部变量 30
2.5.4 静态变量和寄存器变量 32
2.5.5 函数递归和分程序结构 34
2.6 构造型数据类型 38
2.6.1 数组类型 38
2.6.2 结构体(struct)类型 39
2.6.3 指针类型 40
2.6.4 共用体(union)类型 42
2.6.5 变量的初始化 43
2.7 文件 44
2.7.1 文件的概念 44
2.7.2 文件的处理 45
2.7.3 UNIX系统编程 47
2.8 预处理程序和其他重要的问题 49
2.8.1 宏定义 49
2.8.2 文件包括语句 51
2.8.3 条件编译 53
2.8.4 其他重要的问题 54
第三章 如何将C过渡到C++ 60
3.1 C++语言及其发展史 60
3.2 在较小范围内如何用C++增强C 61
3.2.3 结构体或类名 62
3.2.4 在块(分程序)内说明 62
3.2.5 作用域限定运算符 62
3.2.1 注释行 62
3.2.2 枚举名 62
3.2.6 const说明符 63
3.2.7 无名共用体(Anonymous unions) 63
3.2.8 显式类型转换 63
3.2.9 函数原型 63
3.2.10 函数名重载 63
3.2.11 函数参数的缺省值 64
3.2.12 具有不确定参数个数的函数 64
3.2.13 函数中引用参数 64
3.2.16 指向void的指针和返回void函数 65
3.3 在较大范围内如何将C++增强C 65
3.2.14 inline说明符 65
3.2.15 new和delete运算符 65
3.3.1 类的构造和数据封装 66
3.3.2 结构是一个特殊类 66
3.3.3 构造函数和析构函数 66
3.3.4 私有、保护和公共部分 66
3.3.5 对象和消息 66
3.3.6 友元(friends) 66
3.3.10 流库 67
3.3.9 虚拟函数 67
3.3.8 导出类 67
3.3.7 类中运算符和函数名重载 67
第四章 快速掌握C++语言 68
4.1 注释行 68
4.2 常数、类型和说明 68
4.3 C++运算符 73
4.4 传递引用 76
4.5 指针 77
4.6 const说明符 82
4.7 枚举类型 83
4.8 无名共用体(Anongmous unions) 84
4.9 显式类型转换 84
4.10 函数 85
4.10.1 函数原型 86
4.10.2 inline函数 86
4.10.3 缺省自变量 86
4.10.4 重载函数名 87
4.10.5 不确定自变量个数的函数 88
4.10.6 指向函数的指针和类属 88
4.11 C++系统的文件和物理组织 92
第五章 数据封装和数据隐藏 94
5.1 过程语言、数据抽象、封装和数据隐藏 94
5.2 C++类 95
5.3 类自引用 100
5.4 构造函数和析构函数 102
5.4.1 一个C++类的栈抽象数据类型的实现 103
5.4.2 用Modula-2实现的栈抽象数据类型 105
5.5 作为成员的类对象 107
5.6 对象向量 108
5.7 友元(friends) 110
5.8 类的静态成员 111
5.9 运算符重载 111
5.9.1 双目和单目运算符 112
5.9.2 运算符重载的两个例子 113
5.9.3 〈stream.h〉库 123
5.10 几个基本行类 127
5.10.1 类属表 127
5.10.2 用二叉查找树实现类属查找表 132
5.10.3 search-table抽象的C++封装 133
第六章 继承和导出类 144
6.1 导出类构造 145
6.2 父类有构造函数的导出类 148
6.3 导出类的一些例子 150
6.3.1 导出counter类 150
6.3.2 一个大学的类系统 152
6.3.3 从类属表中导出栈和队列 156
第七章 多态性和虚拟函数 160
7.1 虚拟函数 161
7.2.1 异质链表的非多态性解 164
7.2 生成链接表的一个面向对象解 164
7.2.2 异质链表的面向对象解 170
7.2.3 非面向对象和面向对象系统的维护 178
7.3 多态性的异质查询树 183
7.4 使用多态性构造的有限状态自动机 188
第八章 C++与面向对象程序设计典型实例剖析 193
8.1 快速拼写检查程序 193
8.1.1 拼写检查程序的设计说明 193
8.1.2 拼写检查程序的高层设计 193
8.1.3 拼写检查程序的低层设计 196
8.1.4 拼写检查程序的实现 197
8.2 银行出纳员离散事件模拟 208
8.2.1 队列模拟的设计说明 208
8.2.2 队列模拟的高层设计 209
8.2.3 队列模拟的低层设计 214
8.2.4 队列模拟的实现 214
8.2.5 模拟输出 230
8.2.6 队列模拟的维护 233
8.3 交互式函数评价程序 237
8.3.1 函数评价程序的设计说明 238
8.3.2 表达式树的回顾 239
8.3.3 函数评价程序的高层设计 244
8.3.4 函数评价程序的低层设计 249
8.3.5 函数评价程序的全部实现 256
8.4 用C++仿真生态系统 274
8.4.1 人工生命是什么? 274
8.4.2 计算机和生命 275
8.4.3 生态系统仿真的基本说明 275
8.4.4 用C++仿真生态系统实例 276
参考文献 286