第1章 面向对象程序设计概述 1
1.1 面向对象程序设计 1
1.1.1 什么是面向对象程序设计 1
1.1.2 面向对象程序设计的基本概念 2
1.1.3 面向对象程序设计的基本特征 4
1.2 为什么要使用面向对象程序设计 8
1.2.1 面向过程程序设计的局限性 8
1.2.2 面向对象程序设计的主要优点 9
1.3 面向对象程序设计的语言 10
1.3.1 面向对象程序设计语言的发展概况 10
1.3.2 几种典型的面向对象程序设计语言 11
本章小结 12
习题 13
第2章 C++基础 14
2.1 C++的产生和特点 14
2.1.1 C++的产生 14
2.1.2 C++的特点 15
2.2 C++程序的结构特性 15
2.2.1 一个简单的C++示例程序 15
2.2.2 C++程序的结构特性 17
2.3 C++程序的编辑、编译、连接和运行 18
2.4 C++在非面向对象方面对C的扩充 19
2.4.1 注释行 19
2.4.2 C++的输入和输出 19
2.4.3 灵活的变量声明 22
2.4.4 结构、联合和枚举名 23
2.4.5 函数原型 23
2.4.6 const修饰符 25
2.4.7 void型指针 27
2.4.8 内联函数 28
2.4.9 带有默认参数值的函数 30
2.4.10 函数重载 31
2.4.11 作用域标识符:: 33
2.4.12 强制类型转换 33
2.4.13 new和delete 34
2.4.14 引用 37
本章小结 44
习题 44
第3章 类和对象(一) 48
3.1 类的构成 48
3.1.1 从结构体到类 48
3.1.2 类的构成 49
3.2 成员函数的定义 51
3.2.1 普通成员函数的定义 51
3.2.2 内联成员函数的定义 52
3.3 对象的定义和使用 53
3.3.1 类与对象的关系 53
3.3.2 对象的定义 53
3.3.3 对象中成员的访问 54
3.3.4 类的作用域和类成员的访问属性 57
3.3.5 对象赋值语句 57
3.4 构造函数与析构函数 59
3.4.1 构造函数 59
3.4.2 成员初始化列表 62
3.4.3 带默认参数的构造函数 64
3.4.4 析构函数 65
3.4.5 默认的构造函数和默认的析构函数 68
3.4.6 构造函数的重载 71
3.4.7 拷贝构造函数 73
3.4.8 浅拷贝和深拷贝 80
本章小结 82
习题 83
第4章 类和对象(二) 88
4.1 自引用指针this 88
4.2 对象数组与对象指针 90
4.2.1 对象数组 90
4.2.2 对象指针 93
4.2.3 string类 96
4.3 向函数传递对象 98
4.3.1 使用对象作为函数参数 98
4.3.2 使用对象指针作为函数参数 98
4.3.3 使用对象引用作为函数参数 99
4.4 静态成员 100
4.4.1 静态数据成员 100
4.4.2 静态成员函数 105
4.5 友元 109
4.5.1 友元函数 109
4.5.2 友元类 113
4.6 类的组合 114
4.7 共享数据的保护 118
4.7.1 常引用 118
4.7.2 常对象 119
4.7.3 常对象成员 120
4.8 C++程序的多文件组成 123
4.9 程序举例 124
本章小结 127
习题 128
第5章 继承与派生 136
5.1 继承与派生的概念 136
5.1.1 为什么要使用继承 136
5.1.2 派生类的声明 138
5.1.3 基类成员在派生类中的访问属性 139
5.1.4 派生类对基类成员的访问规则 140
5.2 派生类的构造函数和析构函数 146
5.2.1 派生类构造函数和析构函数的调用顺序 147
5.2.2 派生类构造函数和析构函数的构造规则 147
5.3 调整基类成员在派生类中的访问属性的其他方法 152
5.3.1 同名成员 152
5.3.2 访问声明 154
5.4 多继承与虚基类 158
5.4.1 声明多继承派生类的方法 158
5.4.2 多继承派生类的构造函数与析构函数 160
5.4.3 虚基类 163
5.5 赋值兼容规则 168
5.6 程序举例 171
本章小结 173
习题 174
第6章 多态性与虚函数 181
6.1 多态性概述 181
6.2 虚函数 182
6.2.1 虚函数的引入 182
6.2.2 虚函数的作用和定义 183
6.2.3 虚析构函数 186
6.2.4 虚函数与重载函数的关系 188
6.2.5 多继承与虚函数 190
6.3 纯虚函数和抽象类 191
6.3.1 纯虚函数 191
6.3.2 抽象类 192
6.4 程序举例 193
本章小结 196
习题 196
第7章 运算符重载 200
7.1 运算符重载概述 200
7.2 运算符函数重载为类的友元函数和成员函数 203
7.2.1 友元运算符重载函数 203
7.2.2 成员运算符重载函数 208
7.2.3 运算符重载应该注意的几个问题 212
7.3 几个常用运算符的重载 215
7.3.1 单目运算符“++”和“--”的重载 215
7.3.2 赋值运算符“=”的重载 218
7.3.3 下标运算符“[]”的重载 221
7.3.4 函数调用运算符“()”的重载 223
7.4 重载插入运算符和提取运算符 225
7.4.1 重载插入运算符“<<” 225
7.4.2 重载提取运算符“>>” 227
7.5 类型转换 229
7.5.1 标准类型间的转换 229
7.5.2 类类型与标准类型间的转换 230
7.6 程序举例 234
本章小结 236
习题 236
第8章 函数模板与类模板 241
8.1 模板的概念 241
8.2 函数模板 242
8.2.1 函数模板的声明 242
8.2.2 函数模板的使用 243
8.3 类模板 246
8.4 程序举例 251
本章小结 254
习题 255
第9章 C++的输入和输出 259
9.1 C++为何建立自己的输入输出系统 259
9.2 C++的流库及其基本结构 260
9.2.1 C++的流 260
9.2.2 预定义的流对象 262
9.2.3 输入输出流的成员函数 263
9.3 预定义类型输入输出的格式控制 265
9.3.1 用流成员函数进行输入输出格式控制 265
9.3.2 使用预定义的操纵符进行输入输出格式控制 268
9.3.3 使用用户自定义的操纵符进行输入输出格式控制 271
9.4 文件的输入输出 272
9.4.1 文件的概述 272
9.4.2 文件的打开与关闭 273
9.4.3 文本文件的读写 276
9.4.4 二进制文件的读写 278
9.5 程序举例 284
本章小结 286
习题 287
第10章 异常处理和命名空间 290
10.1 异常处理 290
10.1.1 异常处理概述 290
10.1.2 异常处理的方法 291
10.2 命名空间和头文件命名规则 296
10.2.1 命名空间 296
10.2.2 头文件命名规则 297
本章小结 298
习题 298
第11章 面向对象程序设计方法与实例 300
11.1 面向对象程序设计的一般方法和技巧 300
11.2 设计实例 304
11.2.1 举例:模拟网上购书的结账功能 304
11.2.2 举例:模拟ATM机为用户提供服务 311
本章小结 325
习题 326
附录A 上机实验题 327
参考文献 334