第1章 C++语言基础 1
1.1 C++语言概述 1
1.1.1 标准C++ 1
1.1.2 C++语言的简单程序 2
1.2 面向对象的程序设计思想 4
1.2.1 过程化的程序设计 4
1.2.2 面向对象的程序设计 6
1.3 面向对象程序设计的主要特点 7
1.4 程序的编辑、编译与运行 8
提示 9
思考 10
上机实验 10
第2章 基本数据与操作 11
2.1 标识符与关键字 11
2.1.1 标识符 11
2.1.2 关键字 12
2.2 数据与数据类型 12
2.2.1 程序中的数据 12
2.2.2 基本数据类型 13
2.2.3 整型常量 14
2.2.4 浮点型常量 14
2.2.5 字符型常量与字符串常量 14
2.2.6 符号常量 16
2.2.7 变量 17
2.3 简单运算 18
2.3.1 运算符和表达式 18
2.3.2 算术运算 18
2.3.3 赋值类运算 19
2.3.4 自加和自减运算 20
2.3.5 关系运算和逻辑运算 20
2.3.6 位运算 21
2.3.7 sizeof运算与逗号运算 23
2.4 混合运算与类型转换 24
2.4.1 隐式类型转换 24
2.4.2 显式类型转换 24
2.5 数据输入与输出 25
提示 26
思考 27
练习 27
上机实验 28
第3章 语句与流程控制 29
3.1 语句 29
3.2 选择结构 30
3.2.1 条件运算符和条件表达式 30
3.2.2 if语句 30
3.2.3 switch语句 32
3.3 循环结构 34
3.3.1 while语句 34
3.3.2 do-while语句 36
3.3.3 for语句 37
3.3.4 流程转向语句 39
提示 41
思考 41
练习 41
上机实验 43
第4章 指针、数组与引用 44
4.1 指针 44
4.1.1 指针的概念 44
4.1.2 指针运算 46
4.1.3 指针的安全性问题 47
4.2 数组 50
4.2.1 数组的定义与访问 50
4.2.2 数组的指针访问 51
4.3 引用 53
4.4 与指针相关的其他类型 54
4.4.1 指向指针的指针 54
4.4.2 指针数组 55
4.4.3 数组名与指向数组的指针变量 56
4.5 动态内存分配 57
4.5.1 分配单个对象 57
4.5.2 分配一个数组 58
4.5.3 malloc与free 59
提示 59
思考 60
练习 60
上机实验 61
第5章 函数与函数模板 63
5.1 函数的定义与声明 63
5.1.1 函数定义 63
5.1.2 函数声明 64
5.2 函数调用与参数匹配 65
5.2.1 调用关系 65
5.2.2 函数返回控制与函数调用表达式 66
5.3 参数的传递方式 68
5.3.1 普通传值方式 69
5.3.2 传递指针方式 69
5.3.3 传递引用方式 72
5.4 特殊的函数返回值 73
5.4.1 返回指针的函数 73
5.4.2 返回引用的函数 75
5.5 递归函数 77
5.6 内联函数 79
5.7 函数重载 79
5.8 指向函数的指针 81
5.9 函数模板 85
5.9.1 函数模板定义 85
5.9.2 模板函数调用 86
5.9.3 模板函数重载 87
5.10 变量的存储属性 88
5.10.1 外部变量 88
5.10.2 静态变量 89
5.10.3 自动变量 90
提示 90
思考 91
练习 91
上机实验 93
第6章 类与对象 95
6.1 类的定义 95
6.1.1 类的含义与表述 95
6.1.2 类定义的语法规则 96
6.2 类对象 98
6.2.1 对象定义 98
6.2.2 成员访问 98
6.2.3 对象存储 100
6.3 类的方法 101
6.3.1 为类提供必要的方法 101
6.3.2 inline方法 101
6.3.3 方法重载与缺省参数 102
6.3.4 常成员函数 102
6.3.5 this指针 103
6.3.6 类的模板函数方法 104
6.4 构造函数与对象初始化 104
6.4.1 初始化的难题 104
6.4.2 构造函数 105
6.4.3 无名对象与临时对象 107
6.4.4 对象数组与动态对象 108
6.4.5 成员初始化列表与特殊成员的初始化 109
6.5 拷贝构造函数 111
6.5.1 用已有类对象构建新的类对象 111
6.5.2 改变缺省的复制行为 112
6.5.3 拷贝构造函数的实现 113
6.6 析构函数与对象拆除 114
*6.7 设计一个栈类 114
6.8 字符串类string 116
6.9 其他类型构造技术 118
提示 120
思考 120
练习 120
上机实验 122
第7章 组织程序结构的相关技术 123
7.1 宏定义与条件编译 123
7.1.1 宏定义 123
7.1.2 条件编译 124
7.2 头文件包含 124
7.2.1 头文件包含指令 124
7.2.2 新旧库头文件 125
7.2.3 类定义与实现的分离 125
7.2.4 头文件中的内容 125
7.2.5 一个头文件示例 126
7.3 对象的构造与析构次序 126
7.3.1 对象构造的时机和次序 126
7.3.2 对象拆除的时机和次序 127
7.4 名字冲突与名字空间 127
7.4.1 名字冲突及对策 127
7.4.2 定义和使用名字空间 129
*7.5 extern声明及C++与C的混合编程 130
7.5.1 extern声明的作用 130
7.5.2 用extern“C”修饰C的代码 131
提示 132
思考 132
练习 133
上机实验 133
第8章 静态成员、友元与成员指针 134
8.1 静态成员 134
8.1.1 静态属性 134
8.1.2 静态方法 136
8.2 友元 136
*8.3 指向类成员的指针 138
8.3.1 利用普通指针访问静态成员和非静态数据成员 138
8.3.2 指向非静态方法的指针 139
提示 140
思考 141
练习 141
上机实验 142
第9章 继承 143
9.1 继承的概念与表示 143
9.1.1 继承与派生 143
9.1.2 继承关系的描述 144
9.2 继承的实现 145
9.2.1 继承的语法形式 145
9.2.2 对基类成员的访问 146
9.3 派生类对象的构造与析构 147
9.3.1 继承与聚集 147
9.3.2 复杂类型的构造与拆除 148
9.4 继承的工作方式 150
9.4.1 派生类对基类的覆盖 150
9.4.2 利用指针和引用的访问 151
提示 152
思考 152
练习 153
上机实验 154
第10章 虚函数与多态性 155
10.1 共同的基类 155
10.1.1 概念中的共性 155
10.1.2 公共基类 156
10.2 虚函数 157
10.2.1 多态性、静态联编与动态联编 157
10.2.2 用虚函数实现动态联编 158
10.2.3 构造、析构与虚函数 161
*10.2.4 虚函数的内部实现机制 161
10.2.5 重载、覆盖和隐藏 163
10.2.6 动态造型(dynamic_cast) 164
10.3 纯虚函数与抽象类 165
10.3.1 纯虚函数 165
10.3.2 抽象类 165
*10.4 多重继承 166
10.4.1 多重继承的语法 166
10.4.2 多重继承中的二义性 167
10.4.3 虚继承 168
提示 171
思考 171
练习 171
上机实验 172
第11章 运算符重载 173
11.1 重载运算符的概念 173
11.1.1 重载运算符的函数特征 173
11.1.2 类运算符重载的两种方法 174
11.1.3 重载运算符的限制 176
11.2 重载运算符函数的设计 177
11.3 若干常见运算符的重载 178
11.3.1 重载增量运算符++ 178
11.3.2 重载赋值运算符= 179
11.3.3 重载下标运算符 181
11.3.4 重载类型转换运算符 182
*11.3.5 重载函数调用运算符与函数对象 182
提示 183
思考 184
上机实验 184
第12章 流与文件操作 185
12.1 理解流机制 185
12.1.1 流与文件 185
12.1.2 从函数到对象 186
12.1.3 源、汇和iostream流控制类 186
*12.2 构造可流的类 188
12.2.1 进一步探讨cout和cin对象 188
12.2.2 重载输出运算符<< 189
12.2.3 重载输入运算符>> 189
12.3 格式控制 190
12.3.1 使用流的方法 190
12.3.2 使用操控符(Manipulators) 195
*12.3.3 内存格式化(字符串流) 198
12.4 文件流 199
12.4.1 文件打开与关闭 199
12.4.2 文件的读写操作 201
12.4.3 二进制文件 202
12.4.4 文件的随机访问 203
提示 204
思考 204
上机实验 205
第13章 类模板、容器与泛型算法 206
13.1 类模板 206
13.1.1 类模板的定义与使用 206
*13.1.2 设计一个队列模板 209
*13.2 C++的标准模板库 211
13.2.1 从简单操作看STL和泛型编程 211
13.2.2 迭代器 214
13.2.3 几种主要容器类与类的方法 218
13.2.4 几种常用的通用算法 221
提示 223
思考 223
上机实验 223
*第14章 异常处理 224
14.1 异常处理方法 224
14.1.1 传统处理方法 224
14.1.2 try-catch异常处理机制 225
14.2 用try-catch结构处理异常 226
14.3 异常处理中的其他问题 229
提示 230
思考 230
上机实验 231
附录A BCB6.0集成化环境的使用简介 232
附录B VisualC++6.0编程环境简介 241
附录C 常用字符与ASCII码对照表 246
附录D 运算符的优先级与结合性 247
参考文献 248