第1章 面向对象程序设计概述 1
1.1 面向过程程序设计 1
1.2 面向对象程序设计 5
1.2.1 面向对象程序设计的思想 5
1.2.2 面向对象的基本概念 6
1.2.3 面向对象程序设计的优点 9
1.3 面向对象的软件开发 10
1.4 图书馆图书借阅管理系统的面向对象分析与设计 12
1.4.1 面向对象分析 12
1.4.2 面向对象设计 15
本章小结 16
习题 17
第2章 面向过程程序设计概述 18
2.1 从C语言到C++ 18
2.2 简单C++程序 19
2.3 C++对C语言的扩充 25
2.3.1 C++的输入输出 25
2.3.2 C++对C语言数据类型的扩展 26
2.3.3 常变量 26
2.3.4 指针 28
2.3.5 引用 38
2.3.6 函数 44
2.3.7 名字空间 53
2.3.8 字符串变量 56
2.3.9 复数变量 60
2.4 C++程序的编写和实现 63
本章小结 64
习题 64
第3章 类与对象 66
3.1 类的声明和对象的定义 66
3.1.1 类和对象的概念及其关系 66
3.1.2 类的声明 67
3.1.3 对象的定义 68
3.2 类的成员函数 70
3.2.1 成员函数的性质 70
3.2.2 在类外定义成员函数 70
3.2.3 inline成员函数 71
3.2.4 成员函数的存储方式 72
3.3 对象成员的访问 74
3.3.1 通过对象名和成员运算符来访问对象的成员 74
3.3.2 通过指向对象的指针来访问对象的成员 74
3.3.3 通过对象的引用来访问对象的成员 75
3.4 构造函数与析构函数 76
3.4.1 构造函数 76
3.4.2 析构函数 80
3.4.3 构造函数和析构函数的调用次序 81
3.5 对象数组 85
3.6 对象指针 88
3.6.1 指向对象的指针 88
3.6.2 指向对象成员的指针 88
3.6.3 this指针 90
3.7 对象与const 92
3.7.1 常对象 92
3.7.2 常对象成员 93
3.7.3 指向对象的常指针 94
3.7.4 指向常对象的指针 94
3.7.5 对象的常引用 96
3.8 对象的动态创建与释放 97
3.9 对象的赋值与复制 98
3.9.1 对象的赋值 98
3.9.2 对象的复制 102
3.9.3 对象的赋值与复制的比较 105
3.10 向函数传递对象 105
3.11 图书馆图书借阅管理系统中类的声明和对象的定义 108
本章小结 115
习题 115
第4章 继承与派生 118
4.1 继承与派生的概念 118
4.2 派生类的声明 119
4.3 派生类的构成 120
4.4 派生类中基类成员的访问属性 121
4.4.1 公用继承 121
4.4.2 私有继承 123
4.4.3 保护成员和保护继承 125
4.4.4 成员同名问题 127
4.5 派生类的构造函数和析构函数 129
4.5.1 派生类构造函数 129
4.5.2 派生类析构函数 132
4.6 多重继承 134
4.6.1 声明多重继承的方法 134
4.6.2 多重继承派生类的构造函数与析构函数 134
4.6.3 多重继承引起的二义性问题 137
4.6.4 虚基类 139
4.7 基类与派生类对象的关系 143
4.8 聚合与组合 146
4.9 图书馆图书借阅管理系统中继承与聚合的应用 148
本章小结 165
习题 166
第5章 多态性与虚函数 168
5.1 什么是多态性 168
5.2 向上类型转换 169
5.3 功能早绑定和晚绑定 171
5.4 实现功能晚绑定——虚函数 171
5.4.1 虚函数的定义和作用 172
5.4.2 虚析构函数 175
5.4.3 虚函数与重载函数的比较 177
5.5 纯虚函数和抽象类 177
5.6 图书馆图书借阅管理系统中的多态性 180
本章小结 187
习题 188
第6章 友元与静态成员 189
6.1 封装的破坏——友元 189
6.1.1 友元函数 189
6.1.2 友元类 194
6.2 对象机制的破坏——静态成员 195
6.2.1 静态数据成员 196
6.2.2 静态成员函数 198
6.3 图书馆图书借阅管理系统中友元与静态成员的应用 201
本章小结 202
习题 202
第7章 运算符重载 205
7.1 为什么要进行运算符重载 205
7.2 运算符重载的方法 207
7.3 重载运算符的规则 208
7.4 运算符重载函数作为类的成员函数和友元函数 210
7.4.1 运算符重载函数作为类的成员函数 210
7.4.2 运算符重载函数作为类的友元函数 214
7.5 几种常用运算符的重载 217
7.5.1 单目运算符“++”和“--”的重载 217
7.5.2 赋值运算符“=”的重载 221
7.5.3 流插入运算符“<<”和流提取运算符“>>”的重载 223
7.6 不同类型数据间的转换 227
7.6.1 系统预定义类型间的转换 227
7.6.2 转换构造函数 228
7.6.3 类型转换函数 231
7.7 图书馆图书借阅管理系统中的运算符重载 233
本章小结 238
习题 239
第8章 泛型编程 240
8.1 函数模板 240
8.1.1 函数模板的定义 241
8.1.2 函数模板的实例化 243
8.1.3 模板参数 244
8.1.4 函数模板重载 248
8.2 类模板 251
8.2.1 类模板的定义 252
8.2.2 类模板的实例化 253
8.2.3 类模板参数 256
8.3 STL简介 259
8.3.1 容器 259
8.3.2 迭代器 269
8.3.3 算法 271
8.3.4 函数对象 273
8.4 图书馆图书借阅管理系统中的泛型编程 276
本章小结 282
习题 282
第9章 输入输出 285
9.1 C++的输入输出概述 285
9.1.1 C++的输入输出 285
9.1.2 C++的输入输出流 286
9.2 C++的标准输入输出流 288
9.2.1 C++的标准输出流 288
9.2.2 C++的标准输入流 291
9.3 输入输出运算符 297
9.3.1 输入运算符 297
9.3.2 输出运算符 298
9.3.3 输入与输出运算符的重载 298
9.4 C++格式输入输出 299
9.4.1 用流对象的成员函数控制输入输出格式 299
9.4.2 用控制符控制输入输出格式 302
9.5 文件操作与文件流 304
9.5.1 文件的概念 304
9.5.2 文件流类及文件流对象 304
9.5.3 文件的打开与关闭 305
9.5.4 对文本文件的操作 306
9.5.5 对二进制文件的操作 308
9.6 图书馆图书借阅管理系统中的文件操作 312
本章小结 313
习题 313
第10章 异常处理 315
10.1 C++异常处理概述 315
10.2 C++异常处理的实现 316
10.3 异常与函数 322
10.3.1 在函数中处理异常 322
10.3.2 在函数调用中完成异常处理 323
10.3.3 限制函数异常 324
10.4 异常与类 324
10.4.1 构造函数、析构函数与异常处理 324
10.4.2 异常类 327
10.5 图书馆图书借阅管理系统中的异常处理 330
本章小结 332
习题 333
第11章 图形界面设计 334
11.1 基于对话框的图形界面C++程序设计 334
11.2 基于单文档的图形界面C++程序设计 345
11.3 图书馆图书借阅管理系统的图形界面设计 364
本章小结 364
习题 365
参考文献 366