第1章 面向对象程序设计概述 1
1.1 面向对象程序设计方法的发展历史 1
1.2 面向过程和面向对象程序设计方法概述 2
1.2.1 面向过程程序设计 3
1.2.2 面向对象程序设计 4
1.3 面向对象程序设计的基本术语 5
1.4 面向对象程序设计的基本特征 7
1.4.1 抽象性 7
1.4.2 封装性 8
1.4.3 继承性 9
1.4.4 多态性 10
1.5 面向对象程序设计语言 10
1.5.1 从C到C++ 10
1.5.2 其他的面向对象程序设计语言 11
1.6 基于Visual Studio 2010的C++应用程序的开发 12
小结 16
习题 17
第2章 C++基础 18
2.1 C++程序的组成部分 18
2.2 命名空间 20
2.2.1 什么是命名空间 20
2.2.2 C++中的命名空间定义 21
2.2.3 C++中的命名空间的使用 23
2.2.4 std命名空间 25
2.3 C++数据的输入/输出 27
2.3.1 C++的流 27
2.3.2 cin和流提取运算符〉〉 27
2.3.3 cout和流插入运算符〈〈 28
2.4 引用 28
2.5 函数 30
2.5.1 函数原型 30
2.5.2 重载函数 31
2.5.3 带有默认参数的函数 33
2.5.4 内联函数 34
2.5.5 引用参数和返回引用 35
2.6 变量的作用域与可见性 37
2.6.1 作用域 37
2.6.2 可见性 39
2.7 变量的生存期 40
2.7.1 静态生存期 40
2.7.2 动态生存期 40
2.8 const常量 41
2.8.1 常量的定义 42
2.8.2 const和#define 42
2.9 动态内存分配和释放 43
2.9.1 new运算符 43
2.9.2 delete运算符 44
2.10 编译预处理 45
2.10.1 宏定义 45
2.10.2 文件包含 46
2.10.3 条件编译 46
2.11 文件的输入和输出 48
2.11.1 文件的打开和关闭 48
2.11.2 文件的输入和输出 49
小结 50
习题 51
第3章 类和对象 53
3.1 类和对象的概念 53
3.1.1 类的基本概念 53
3.1.2 对象的基本概念 54
3.2 类的定义 54
3.2.1 类的定义格式 54
3.2.2 类的成员 55
3.2.3 类成员访问控制权限 55
3.2.4 成员函数的实现方式 58
3.2.5 将成员函数设置为内联函数 59
3.2.6 成员函数重载 60
3.3 对象的创建与使用 61
3.3.1 对象的定义 61
3.3.2 对象成员的访问 62
3.4 构造函数 65
3.4.1 构造函数的定义和功能 66
3.4.2 默认构造函数 67
3.4.3 无参构造函数 67
3.4.4 构造函数的重载 67
3.4.5 带默认参数的构造函数 68
3.4.6 构造函数与初始化列表 69
3.5 析构函数 70
3.6 构造函数和析构函数的调用顺序 71
3.7 对象数组与对象指针 73
3.7.1 对象数组 73
3.7.2 对象指针 74
3.7.3 this指针 76
3.8 向函数传递对象 77
3.8.1 使用对象作为函数参数 77
3.8.2 使用对象指针作为函数参数 78
3.8.3 使用对象引用作为函数参数 79
3.8.4 三种传递方式比较 80
3.9 对象的赋值和复制 81
3.9.1 对象赋值语句 82
3.9.2 拷贝构造函数 83
3.10 类的组合 85
3.11 程序实例 88
小结 91
习题 92
第4章 类与对象的其他特性 93
4.1 类的静态成员 93
4.1.1 静态数据成员 93
4.1.2 静态数据成员的定义 94
4.1.3 静态数据成员的初始化 94
4.1.4 静态数据成员的使用 95
4.1.5 静态成员函数 97
4.2 友元 99
4.2.1 友元函数 100
4.2.2 友元类 102
4.3 类的作用域和对象的生存期 104
4.3.1 类的作用域 104
4.3.2 对象的生存期 105
4.4 常量类型 107
4.4.1 常量对象 107
4.4.2 常量成员 108
4.4.3 常量引用 111
4.4.4 常量指针与指向常量的指针 112
小结 114
习题 115
第5章 继承与派生 116
5.1 类的继承与派生概念 116
5.2 基类与派生类 118
5.2.1 派生类的声明 118
5.2.2 派生类的生成过程 119
5.2.3 继承方式和派生类的访问权限 120
5.3 派生类的构造函数和析构函数 126
5.3.1 派生类构造函数 126
5.3.2 派生类析构函数的构建 129
5.3.3 派生类构造函数和析构函数的执行顺序 130
5.4 多重继承 132
5.4.1 多重继承的声明 132
5.4.2 多重继承的构造函数和析构函数 133
5.4.3 多重继承中的二义性 135
5.4.4 虚基类 140
5.5 子类型与赋值兼容规则 143
5.5.1 子类型 143
5.5.2 赋值兼容规则 144
5.6 程序实例 146
小结 149
习题 149
第6章 多态性 151
6.1 多态性的概念 151
6.1.1 多态的类型 152
6.1.2 静态关联与动态关联 152
6.2 运算符重载 152
6.2.1 运算符重载的概念 152
6.2.2 运算符重载的方法 153
6.2.3 重载运算符的规则 154
6.2.4 运算符重载为成员函数和友元函数 155
6.2.5 重载双目运算符 157
6.2.6 重载单目运算符 158
6.2.7 重载流插入运算符和流提取运算符 160
6.3 不同类型数据间的转换 162
6.3.1 标准类型数据间的转换 162
6.3.2 用转换构造函数实现类型转换 163
6.3.3 用类型转换函数进行类型转换 163
6.4 虚函数 164
6.4.1 虚函数的定义 164
6.4.2 虚函数的作用 165
6.4.3 对象的存储 170
6.4.4 虚析构函数 171
6.5 纯虚函数与抽象类 173
6.5.1 纯虚函数 173
6.5.2 抽象类 173
小结 177
习题 177
第7章 模板 179
7.1 模板的概念 179
7.2 函数模板与模板函数 180
7.2.1 函数模板的定义和模板函数的生成 180
7.2.2 模板函数显式具体化 185
7.3 类模板与模板类 186
7.3.1 类模板的定义和使用 187
7.3.2 类模板的派生 193
7.3.3 类模板显式具体化 195
7.4 程序实例 198
小结 205
习题 205
第8章 文件和流 207
8.1 C++的输入/输出 207
8.2 标准输入流 208
8.2.1 使用cin进行输入 208
8.2.2 其他istream类方法 209
8.3 标准输出流 210
8.3.1 使用cout进行输出 210
8.3.2 使用cout进行格式化输出 212
8.3.3 其他ostream类方法 217
8.4 文件的输入和输出 218
8.4.1 文件的打开与关闭 219
8.4.2 文本文件的读写操作 220
8.4.3 二进制文件的读写操作 223
8.4.4 使用文件指针成员函数实现随机存取 224
8.5 程序实例 226
小结 227
习题 228
第9章 异常处理 229
9.1 异常处理概述 229
9.1.1 异常、异常处理的概念 229
9.1.2 异常处理的基本思想 230
9.2 异常处理的实现 230
9.2.1 异常处理的语句 231
9.2.2 异常接口声明 236
9.3 构造函数、析构函数与异常处理 237
9.4 异常匹配 239
9.5 标准异常及层次结构 241
9.6 异常处理中需要注意的问题 242
小结 243
习题 243
参考文献 244