第1章 面向对象程序设计概论 1
1.1 程序设计技术的发展 1
1.1.1 面向机器的程序设计语言 2
1.1.2 面向问题求解的程序设计 2
1.1.3 以数据结构为中心的程序设计 3
1.1.4 面向对象的程序设计 3
1.2 面向对象的基本概念 5
1.2.1 面向对象的目标 5
1.2.2 面向对象语言中的类和对象 6
1.3 类和对象的基本特性 8
1.3.1 封装性 8
1.3.2 继承性 8
1.3.3 多态性 9
习题1 10
第2章 C++语言基础 11
2.1 C++语言的基本特点 11
2.1.1 C++语言的由来和发展 11
2.1.2 C++语言的标准化 12
2.2 C++语法基础 12
2.2.1 字符与单词 12
2.2.2 语句 14
2.3 C++程序的基本结构 15
2.3.1 注释 15
2.3.2 预处理命令 15
2.3.3 程序主体 16
2.4.1 C++程序的实现 18
2.4 C++程序的实现与运行环境 18
2.4.2 C++程序的运行环境 19
习题2 19
第3章 C++的基本数据类型 21
3.1 基本数据类型 21
3.2 常量 23
3.2.1 字符常量 23
3.2.2 整型常量 24
3.2.3 浮点常量 24
3.2.4 字符串常量 24
3.2.5 符号常量 25
3.3.1 变量的类型和定义 26
3.3 变量 26
3.3.2 变量的初始化和赋值 27
3.4 指针变量 28
3.4.1 指针的概念 28
3.4.2 指针的定义和使用 29
3.4.3 特殊指针 31
3.4.4 指针运算 32
3.5 类型转换 34
3.5.1 隐式转换 34
3.5.2 强制转换 36
3.5.3 类型转换时要注意的问题 37
习题3 38
4.1.1 算术运算 40
第4章 C++表达式与基本程序控制结构 40
4.1 运算符与表达式 40
4.1.2 关系运算 42
4.1.3 逻辑运算 42
4.1.4 条件运算 43
4.1.5 位运算 43
4.1.6 求字节数运算 44
4.1.7 运算符的优先级和结合性 45
4.2 基本程序控制结构 46
4.2.1 顺序结构 47
4.2.2 选择结构 47
4.2.3 循环结构 53
习题4 60
第5章 数据类型的扩展 64
5.1 数组 64
5.1.1 数组的概念 64
5.1.2 数组的定义、初始化和赋值 65
5.1.3 一维数组与字符串变量 70
5.1.4 多维数组与字符串数组 71
5.1.5 指针与数组 72
5.2 结构类型 78
5.2.1 结构的定义和访问 78
5.2.2 结构与链表 80
5.3.1 枚举的定义 82
5.3.2 枚举常量 82
5.3 枚举类型 82
5.3.3 枚举变量 83
5.4 typedef与类型别名 83
习题5 84
第6章 函数 87
6.1 函数定义与函数原型 87
6.1.1 C++的函数 87
6.1.2 函数定义 88
6.1.3 函数原型 89
6.2 函数的调用和参数传递 90
6.2.1 函数调用的一般概念 90
6.2.2 函数的传值调用 91
6.2.3 函数的传地址调用 93
6.3 指向函数的指针 97
6.3.1 函数指针 97
6.3.2 函数指针作为函数参数 99
6.4 变量的存储类别与作用域 100
6.4.1 变量的存储类别 100
6.4.2 变量的作用域 101
6.4.3 静态存储的变量 104
6.4.4 自由变量的分配与释放 105
6.4.5 名字空间和作用域运算符 107
习题6 110
第7章 类和对象 113
7.1 类的定义 113
7.1.1 类定义格式 113
7.1.2 成员函数的定义 116
7.2 构造函数和析构函数 117
7.2.1 构造函数 117
7.2.2 析构函数 119
7.2.3 缺省构造函数和缺省析构函数 121
7.3 对象的定义和初始化 121
7.3.1 对象的定义 121
7.3.2 对象的存储和访问 122
7.3.3 对象的生存期 122
7.3.4 类的对象成员 123
7.4 指向对象的指针和对象的引用 124
7.4.1 对象的指针 124
7.4.2 指向类成员的指针 126
7.4.3 对象的引用 128
7.4.4 作为函数参数的对象 129
7.4.5 对象数组 132
7.4.6 动态对象 136
7.5 类的静态成员 137
7.5.1 静态数据成员 137
7.5.2 静态成员函数 139
7.6 类的友元 142
7.6.1 友元函数 143
7.6.2 友元类 144
7.6.3 友元成员 145
习题7 147
8.1.1 继承的概念及意义 156
8.1 继承的基本概念 156
第8章 继承 156
8.1.2 派生类的定义格式 157
8.1.3 继承方式 158
8.2 派生类的构造和析构 163
8.2.1 派生类的构造函数 163
8.2.2 派生类的析构函数 165
8.2.3 派生类构造函数和析构函数的使用中应注意的问题 166
8.3 公有继承下的赋值兼容规则 167
8.4 继承成员的调整 169
8.4.1 恢复访问控制方式 170
8.4.2 继承成员的重命名和重定义 170
8.5.2 多继承派生类的构造函数 172
8.5.1 多继承的概念 172
8.5 多继承和虚基类 172
8.5.3 重复继承和虚基类 176
习题8 181
第9章 重载 187
9.1 重载的概念 187
9.2 函数重载 188
9.2.1 函数重载的区分机制 188
9.2.2 构造函数重载 191
9.2.3 拷贝初始化构造函数 193
9.3 运算符重载 197
9.3.1 运算符重载的概念 197
9.3.2 类成员运算符重载 198
9.3.3 友元运算符重载 199
9.3.4 运算符重载举例 202
习题9 210
第10章 多态类与抽象类 216
10.1 虚函数与多态类 216
10.1.1 虚函数的概念和定义 216
10.1.2 动态绑定及其实现技术 218
10.1.3 虚函数应用举例 221
10.1.4 虚析构函数 228
10.2 纯虚函数与抽象类 230
10.2.1 纯虚函数 230
10.2.2 抽象类的概念和定义 231
10.2.3 接口继承 235
习题10 237
第11章 输入输出流类 241
11.1 C++流类库结构 241
11.1.1 流缓冲区类 241
11.1.2 输入输出流类 242
11.2 C++的输入与输出 243
11.2.1 标准输入输出 243
11.2.2 格式化的输入输出 245
11.3 流类运算符重载 248
11.4 文件流与文件操作 249
11.4.1 文件流的创建和文件的打开 249
11.4.2 流类成员函数与文件的操作 251
11.4.3 ASCII文件的输入输出 252
11.4.4 二进制文件及C++类类型对象的输入输出 254
习题11 256
第12章 异常处理 260
12.1 异常处理的基本语法 260
12.2 异常捕获 262
12.2.1 单路捕获 262
12.2.2 多路捕获 263
12.3 异常处理的其他用法 265
12.3.1 异常的重抛 265
12.3.2 异常的限制 266
12.3.3 异常成组 267
习题12 270
13.1.1 软件重用的意义 274
13.1 软件重用的概念 274
第13章 C++语言与软件重用 274
13.1.2 C++支持的软件重用技术 275
13.2 C++模板与重用 277
13.2.1 类型参数化 277
13.2.2 函数模板与模板函数 278
13.2.3 类模板与模板类 281
13.2.4 标准模板库(STL)技术 285
13.3 面向对象设计模式与软件重用 293
13.3.1 设计模式语言 293
13.3.2 设计模式举例 296
习题13 308
参考文献 314