第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几种典型的面向对象程序设计语言 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++程序的结构特点 16
2.3 C++对C的扩充 17
2.3.1注释与续行 17
2.3.2 C++的输入输出流 18
2.3.3用const定义常变量 21
2.3.4函数原型声明 23
2.3.5函数重载 24
2.3.6带有缺省参数的函数 26
2.3.7变量的引用 27
2.3.8内联函数 34
2.3.9作用域标识符: 36
2.3.10灵活的局部变量定义 37
2.3.11结构名、联合名和枚举名可作为类型名 37
2.3.12强制类型转换 38
2.3.13字符串变量 38
2.3.14 new和delete 41
2.4 C++编写和实现 42
2.5关于C++上机实践 44
习题二 44
第3章 类和对象 48
3.1类与对象的基本概念 48
3.1.1从结构到类 48
3.1.2类的定义 50
3.1.3成员函数的定义 52
3.1.4对象的定义及使用 54
3.1.5类的作用域和类成员的访问属性 57
3.2构造函数与析构函数 59
3.2.1对象的初始化和构造函数 59
3.2.2用参数初始化列表对数据成员初始化 63
3.2.3构造函数的重载 65
3.2.4带默认参数的构造函数 66
3.2.5析构函数 68
3.3对象数组和对象指针 71
3.3.1对象数组 71
3.3.2对象指针 74
3.3.3 this指针 79
3.4向函数传递对象 81
3.4.1使用对象作为函数参数 81
3.4.2使用对象指针作为函数参数 82
3.4.3使用对象引用作为函数参数 83
3.5对象的赋值和复制 84
3.5.1对象赋值 84
3.5.2对象复制 85
3.6静态成员 91
3.6.1静态数据成员 91
3.6.2静态成员函数 94
3.7友元 97
3.7.1友元函数 97
3.7.2友元类 101
3.8类的组合 102
3.9常类型 107
3.9.1常引用 107
3.9.2常对象 108
3.9.3常对象成员 109
习题三 111
第4章 派生和继承 115
4.1继承与派生的概念 115
4.1.1什么是继承和派生 115
4.1.2派生类的声明 117
4.1.3派生类的构成 118
4.1.4基类成员在派生类中的访问属性 119
4.1.5派生类对基类成员的访问规则 120
4.2派生类的构造函数和析构函数 128
4.2.1派生类构造函数和析构函数的执行顺序 128
4.2.2派生类构造函数和析构函数的定义规则 129
4.3调整基类成员在派生类中的访问属性的其他方法 134
4.3.1同名成员 134
4.3.2访问声明 135
4.4多重继承 138
4.4.1多重继承派生类的声明 138
4.4.2多重继承派生类的构造函数与析构函数 140
4.4.3多重继承派生类二义性问题 142
4.5虚基类 144
4.5.1虚基类的概念 144
4.5.2虚基类的初始化 146
4.5.3虚基类应用举例 148
4.6基类与派生类对象之间的赋值兼容关系 150
4.7继承与组合 152
习题四 155
第5章 多态性和虚函数 163
5.1多态性概述 163
5.1.1多态的分类 163
5.1.2多态的实现 164
5.2虚函数 165
5.2.1为什么引入虚函数 165
5.2.2虚函数的定义和使用 166
5.2.3虚函数与重载函数的关系 168
5.2.4多继承与虚函数 169
5.2.5虚析构函数 172
5.3纯虚函数和抽象类 174
5.3.1纯虚函数 174
5.3.2抽象类 176
5.4程序举例 177
习题五 184
第6章 运算符重载 192
6.1运算符重载概述 192
6.1.1运算符重载函数的定义 192
6.1.2运算符重载的规则 194
6.2运算符重载函数的两种形式 195
6.2.1友元运算符重载函数 195
6.2.2成员运算符重载函数 201
6.2.3友元运算符重载函数与成员运算符重载函数的比较 205
6.3几种常用运算符重载 208
6.3.1前缀运算符和后缀运算符的重载 208
6.3.2赋值运算符的重载 210
6.3.3下标运算符的重载 212
6.3.4函数调用运算符的重载 214
6.4类型转换 215
6.4.1系统预定义类型间的转换 215
6.4.2类类型与系统预定义类型间的转换 216
习题六 221
第7章 模板与异常 228
7.1模板的概念 228
7.2函数模板与模板函数 229
7.2.1函数模板的说明 230
7.2.2函数模板的使用 230
7.2.3用户定义的参数类型 232
7.2.4函数模板异常处理 233
7.3类模板与模板类 235
7.3.1类模板说明 235
7.3.2使用类模板 237
7.4模板应用举例 239
7.5异常处理 243
7.5.1异常处理概述 244
7.5.2异常处理的方法 244
7.5.3应用举例 247
习题七 251
第8章 C++流类库与输入输出 257
8.1 C++为何建立自己的输入输出系统 257
8.2 C++流类库及其结构 259
8.2.1 C++的流 259
8.2.2流类库 259
8.3标准输入输出流 262
8.3.1标准流类 262
8.3.2格式控制输入输出 265
8.3.3用于输入输出的流成员函数 273
8.4用户自定义类型的输入输出 278
8.4.1重载输出运算符“<<” 279
8.4.2重载输入运算符“>>” 280
8.5文件的输入输出 281
8.5.1文件的概念 281
8.5.2文件流类与文件流对象 282
8.5.3文件的打开与关闭 282
8.5.4对文本文件的操作 284
8.5.5对二进制文件的操作 287
8.6字符串流 292
8.7命名空间和头文件命名规则 295
8.7.1命名空间 295
8.7.2头文件命名规则 300
习题八 301
附录A C++语言运算符的优先级和结合性 307
附录B ASCⅡ码表 308
参考文献 309