第1章 引论 1
1.1 面向对象的目标 1
1.2 面向对象的目标核心概念 3
1.2.1 数据封装 3
1.2.2 继承 4
1.2.3 多态性 5
1.3 按对象方式思维 7
1.4 面向对象的思想和方法 8
1.4.1 面向对象是一种认知方法学 9
1.4.2 面向对象与软件IC 9
1.4.3 面向对象方法与结构程序设计方法 11
1.4.4 对象是抽象数据类型的实现 12
1.5 类属 13
1.6 面向对象的程序设计语言 14
第2章 C++语法 17
2.1 C++程序概貌 17
2.1.1 ISO/ANSI C++头文件 18
2.1.2 名字空间 18
2.1.3 main函数 19
2.1.4 输入和输出 20
2.1.5 注释 21
2.2 C++的内建(Built-in)类型 21
2.2.1 整数类型 21
2.2.2 浮点类型 23
2.3 变量和命名常量 24
2.3.1 标识符 24
2.3.2 变量声明 25
2.3.3 常量(Named Constant)和const关键字 26
2.3.4 易变变量和volatile关键字 27
2.4 用户自定义类型 27
2.4.1 枚举 28
2.4.2 数组 28
2.4.3 结构和联合 30
2.4.4 指针 32
2.4.5 引用 36
2.4.6 用typedef定义类型的别名 39
2.5 C++运算符 40
2.5.1 常用运算符 40
2.5.2 动态内存分配和释放运算符:new和delete 40
2.5.3 类型转换运算符 44
2.6 表达式 45
2.6.1 C++表达式 45
2.6.2 赋值表达式 46
2.6.3 条件和逻辑表达式 46
2.7 C++语句 46
2.7.1 简单语句和复合语句 46
2.7.2 流程控制语句 47
2.8 函数 52
2.8.1 函数原型声明和定义 52
2.8.2 函数的参数 53
2.8.3 函数的返回值 57
2.8.4 内联函数 59
2.8.5 函数递归 60
2.8.6 函数重载 60
2.8.7 变量的存储方式 61
2.8.8 标识符的作用范围 63
2.9 异常处理机制 64
2.9.1 异常处理的意义 64
2.9.2 异常处理的方法 64
2.10 实例:基本的C++程序 70
2.11 习题 72
第3章 类和对象 75
3.1 类与对象 75
3.1.1 类的定义 75
3.1.2 访问控制 78
3.1.3 类和对象的关系 79
3.2 类的成员 80
3.2.1 数据成员 80
3.2.2 成员函数 81
3.2.3 静态成员 82
3.2.4 类外访问成员的方法 87
3.3 C++的类 88
3.4 数据封装和信息隐藏的意义 89
3.5 实例:类与对象 94
3.5.1 简单队列 94
3.5.2 循环队列 96
3.5.3 堆栈、队列的应用 100
3.6 习题 104
第4章 深入类和对象 106
4.1 构造函数 106
4.1.1 构造函数的作用 106
4.1.2 构造函数的定义 107
4.1.3 重载构造函数 109
4.2 析构函数 111
4.3 拷贝构造函数 112
4.4 对象的创建、释放和初始化 118
4.5 对象和指针 120
4.5.1 this指针 120
4.5.2 指向类对象的指针 123
4.5.3 指向类成员的指针 124
4.6 友元关系 127
4.6.1 友元函数 127
4.6.2 友元类 129
4.6.3 友元关系的总结 131
4.7 与类和对象相关的问题 131
4.7.1 对象数组 131
4.7.2 类类型做参数类型 133
4.7.3 类类型常量 135
4.7.4 一个类的对象作为另一个类的成员 137
4.7.5 非局部环境 138
4.7.6 临时对象 139
4.7.7 类中说明枚举类型 139
4.8 实例:类属单向同质链表 140
4.9 习题 146
第5章 运算符重载 148
5.1 重载运算符 149
5.1.1 运算符重载的语法形式 151
5.1.2 重载运算符规则 152
5.1.3 一元和二元运算符 154
5.1.4 重载++和--的前缀和后缀方式 162
5.1.5 重载赋值运算符 167
5.1.6 重载运算符()和[] 169
5.1.7 重载输入和输出运算符 174
5.2 new和delete的重载 177
5.2.1 为一个对象动态分配存储区 177
5.2.2 为一个数组动态分配存储区 179
5.2.3 指针悬挂问题 182
5.2.4 new和delete的重载 185
5.3 类型转换运算符的重载 190
5.3.1 标准类型转换为类类型 191
5.3.2 类类型转换函数 193
5.4 临时对象 204
5.5 实例:复数类重载运算符 207
5.6 习题 210
第6章 继承和派生 213
6.1 派生类的概念 213
6.1.1 为什么要使用继承 213
6.1.2 派生类的声明和继承方式 219
6.1.3 基类对象的初始化 230
6.2 多继承 237
6.2.1 多继承的概念 237
6.2.2 虚基类 240
6.3 继承的意义 246
6.3.1 模块的观点 246
6.3.2 类型的观点 247
6.4 实例 248
6.4.1 继承实例:Point类 248
6.4.2 多基类实例 252
6.5 习题 255
第7章 虚函数和多态性 258
7.1 虚函数 258
7.1.1 静态多态性 258
7.1.2 基类和派生类的指针与对象的关系 260
7.1.3 虚函数与多态性 261
7.2 纯虚函数和抽象类 271
7.3 实例:乐器类 273
7.4 习题 279
第8章 流库 286
8.1 C++的I/O系统 286
8.2 C++流库的结构 287
8.2.1 输入输出流的含义 287
8.2.2 C++流库的结构 287
8.3 输入和输出 289
8.3.1 istream 289
8.3.2 ostream 291
8.3.3 输出运算符<< 292
8.3.4 输入运算符>> 295
8.4 格式控制 297
8.4.1 用iso类成员函数格式化 297
8.4.2 用操纵函数格式化 300
8.5 文件I/O 302
8.5.1 文件的概念 302
8.5.2 文件的打开和关闭 303
8.5.3 文件的读写 304
8.6 实例:文件的复制 307
8.7 习题 308
第9章 模板 310
9.1 类属的概念 310
9.1.1 无约束类属机制 310
9.1.2 约束类属机制 311
9.2 模板的概念 312
9.2.1 函数模板与模板函数 312
9.2.2 类模板与模板类 316
9.3 实例:一维数组 320
9.4 习题 328
第10章 面向对象设计技术 329
10.1 面向对象设计的直观方法 329
10.2 数据库应用的例子 331
10.2.1 问题简述 331
10.2.2 基本结构 332
10.2.3 粗略设计 332
10.2.4 进一步设计 334
10.2.5 对象的操作 337
10.2.6 设计流程图 343
10.2.7 面向对象编程 345
附录1 深入名字空间和例外处理 348
附录2 标准C++头文件 365
参考文献 366