第1章 面向对象程序设计概论 1
1.1程序设计方法 1
1.1.1结构化程序设计方法 1
1.1.2面向对象程序设计方法 2
1.2面向对象程序设计的基本概念 5
1.2.1抽象 5
1.2.2封装 6
1.2.3消息 6
1.2.4继承 6
1.2.5多态 7
1.3面向对象程序设计语言 7
1.3.1混合型的面向对象程序设计语言C++ 7
1.3.2纯面向对象程序设计语言Java 8
1.4C++对面向对象程序设计方法的支持 9
1.5C++程序的实现 9
1.5.1Visual C++6.0 10
1.5.2Visual Studio 13
习题 19
第2章 从C到C++ 21
2.1C++程序基本组成 21
2.1.1C++程序基本结构 21
2.1.2C++程序基本组成 21
2.2简单的输入输出 23
2.2.1键盘输入 24
2.2.2屏幕输出 24
2.3指针与引用 25
2.3.1指针 25
2.3.2引用 27
2.4函数 28
2.4.1函数的定义与调用 28
2.4.2函数原型与带默认参数的函数 30
2.4.3函数的参数传递 31
2.4.4内联函数与重载函数 35
2.4.5标准库函数 37
2.5new和delete运算符 39
2.6其他若干重要的C++特性 40
2.6.1符号常量 40
2.6.2变量的定义 40
2.6.3强制类型转换 40
2.6.4string类型 41
2.6.5结构 42
2.7应用实例 42
2.7.1结构体的定义 42
2.7.2主要函数的实现 43
2.7.3程序的主函数 44
习题 44
第3章 类与对象 48
3.1类 48
3.1.1类的定义 48
3.1.2类成员的访问控制 48
3.1.3成员函数的实现 49
3.2对象 51
3.2.1对象的声明 51
3.2.2对象的创建和销毁 51
3.2.3对象成员的访问 52
3.3构造函数与析构函数 53
3.3.1构造函数 53
3.3.2析构函数 55
3.3.3拷贝构造函数 57
3.4this指针 60
3.5子对象和堆对象 63
3.5.1子对象 63
3.5.2堆对象 66
3.6类的静态成员 71
3.6.1静态数据成员 71
3.6.2静态成员函数 73
3.7类的友元 75
3.7.1友元函数 75
3.7.2友元类 77
3.8应用实例 78
3.8.1Student类的定义 79
3.8.2Student类中函数的实现 79
3.8.3静态成员的初始化及程序的主函数 81
习题 83
第4章 继承机制 89
4.1基类和派生类 89
4.1.1继承和派生的基本概念 89
4.1.2继承的种类 90
4.2单继承 90
4.3派生类的访问控制 92
4.3.1公有继承 92
4.3.2私有继承 93
4.3.3保护继承 94
4.4多继承 96
4.4.1多继承的定义格式 96
4.4.2二义性和支配规则 98
4.4.3虚基类 102
4.5继承机制下的构造函数与析构函数 103
4.5.1继承机制下构造函数的调用顺序 104
4.5.2派生类构造函数的规则 110
4.5.3继承机制下析构函数的调用顺序 115
4.6应用实例 118
4.6.1保护成员的作用 118
4.6.2私有继承 119
习题 120
第5章 多态性和虚函数 123
5.1静态联编与动态联编 123
5.1.1静态联编 123
5.1.2动态联编 126
5.2虚函数 126
5.2.1虚函数的作用 126
5.2.2虚函数与一般重载函数的区别 128
5.2.3继承虚属性 128
5.3成员函数中调用虚函数 133
5.4构造函数和析构函数中调用虚函数 134
5.5纯虚函数和抽象类 135
5.5.1纯虚函数 135
5.5.2抽象类 137
5.6虚析构函数 137
5.6.1虚析构函数的定义与使用 137
5.6.2虚析构函数的必要性 139
5.7应用实例 140
5.7.1类的设计 140
5.7.2基类Employee的定义 141
5.7.3兼职技术人员类Technician的定义 141
5.7.4销售员类Salesman的定义 142
5.7.5经理类Manager的定义 142
5.7.6销售经理类Salesmanager的定义 143
5.7.7编号的初始化与主函数 143
习题 144
第6章 运算符重载 146
6.1运算符重载的规则 146
6.1.1运算符重载的规则 146
6.1.2编译程序选择重载运算符的规则 147
6.2运算符重载的形式 147
6.2.1用成员函数重载运算符 147
6.2.2用友元函数重载运算符 149
6.2.3两种运算符重载形式的比较 151
6.3单目运算符重载 151
6.4赋值运算符重载 156
6.4.1浅拷贝与深拷贝 156
6.4.2重载赋值运算符的格式 157
6.4.3重载赋值运算符函数的返回值 160
6.4.4赋值运算符重载函数与拷贝构造函数的区别 160
6.5特殊运算符重载 162
6.5.1“[]”运算符重载 162
6.5.2“()”运算符重载 165
6.6类类型转换运算符重载 168
6.6.1基本类型到类类型的转换 168
6.6.2类类型到基本类型的转换 169
6.7应用实例 172
习题 176
第7章 模板 178
7.1模板的概念 178
7.1.1强类型的严格性与灵活性 178
7.1.2解决冲突的途径 178
7.1.3模板的概念 179
7.2函数模板 179
7.2.1函数模板的定义 179
7.2.2函数模板的实例化 180
7.2.3函数模板的重载 182
7.3类模板 186
7.3.1类模板定义 186
7.3.2类模板的实例化 187
7.3.3使用函数类型参数的类模板 189
7.3.4使用默认参数的类模板 191
7.4标准模板库STL 193
7.4.1容器 193
7.4.2迭代器 196
7.4.3算法 199
7.5应用实例 202
7.5.1通过自定义类模板对双向链表进行基本操作 202
7.5.2通过STL对双向链表进行基本操作 209
习题 211
第8章 I/O流类库 213
8.1概述 213
8.1.1流的概念 213
8.1.2流类库 213
8.1.3支持文件的流类 214
8.2格式化输入输出 215
8.2.1使用ios类的成员函数进行格式控制 215
8.2.2使用控制符进行格式控制 219
8.3重载流的插入符和提取符 220
8.4I/O常用成员函数 222
8.4.1输入流的常用成员函数 222
8.4.2输出流的常用成员函数 223
8.5流的错误处理 224
8.5.1I/O流的错误状态字 224
8.5.2I/O流的状态函数 225
8.6文件流操作 226
8.6.1文件流 226
8.6.2文件的打开与关闭 227
8.6.3文件的读写 228
8.7应用实例 236
8.7.1定义类 236
8.7.2数据输入函数 236
8.7.3数据显示函数 237
8.7.4数据查找函数 237
8.7.5数据插入函数 238
8.7.6主函数 238
习题 240
第9章 异常处理 244
9.1异常处理的基本思想 244
9.1.1异常处理的概念 244
9.1.2异常处理的基本思想 245
9.2异常处理的实现 246
9.2.1异常处理的语法 247
9.2.2异常处理的执行过程 248
9.2.3异常接口声明 249
9.2.4标准库的异常处理 252
9.3定义自己的异常类 253
9.4异常的逐层传递 255
9.5异常处理中的构造与析构 256
9.6应用实例 258
9.6.1采用自定义异常类 259
9.6.2采用标准异常类 260
习题 261
第10章 综合应用实例 264
10.1设计任务与要求 264
10.2程序的总体结构 264
10.3详细设计 265
10.3.1分数类设计 265
10.3.2异常类设计 269
10.3.3测试函数设计 269
10.4程序清单 270
10.5实例输出 277
附录 实验 281
实验1 简单的C++程序(2学时) 281
实验2 引用与函数(2学时) 282
实验3 构造函数与析构函数(2学时) 284
实验4 静态成员与友元(4学时) 286
实验5 继承与派生(4学时) 288
实验6 多态性与虚函数(4学时) 290
实验7 运算符重载(2学时) 294
实验8 模板(2学时) 297
实验9 I/O流(2学时) 298
实验10 异常处理(2学时) 299
参考文献 302