第1章 C++语言概述 1
1.1 从面向过程的程序设计到面向对象的程序设计 1
1.1.1 传统的结构化程序设计方法 1
1.1.2 面向对象的程序设计方法 3
1.1.3 面向对象的程序设计方法与结构化程序设计方法的比较 7
1.2 C++语言的产生 7
1.3 C++语言的特点 8
1.4 C++程序开发过程 8
1.4.1 Visual C++ 6.0集成开发环境 8
1.4.2 Visual C++ 6.0控制台应用程序开发实例 13
1.5 C++程序的结构与基本组成 16
1.5.1 一个简单的C++程序 16
1.5.2 使用名空间 17
1.5.3 C++输入输出简介 19
1.6 小结 19
习题 19
第2章 基本数据类型、运算符与表达式 21
2.1 数据类型 21
2.1.1 基本数据类型 21
2.1.2 类型修饰符 22
2.2 常量和变量 23
2.2.1 常量 23
2.2.2 变量 26
2.3 运算符和表达式 30
2.3.1 算术运算符和算术表达式 30
2.3.2 赋值运算符和赋值表达式 32
2.3.3 sizeof运算符 33
2.3.4 关系运算符和关系表达式 34
2.3.5 逻辑运算符和逻辑表达式 34
2.3.6 条件运算符 36
2.3.7 位运算符 36
2.3.8 逗号运算符 37
2.3.9 运算符的优先级与结合性 37
2.4 数据的输入与输出 38
2.4.1 数据的输出 38
2.4.2 数据的输入 42
2.5 综合实例 43
2.6 小结 44
习题 44
第3章 C++的控制语句 47
3.1 C++语句概述 47
3.2 C++程序的3种基本结构 48
3.3 if语句 49
3.3.1 单分支if语句 50
3.3.2 双分支if语句 51
3.3.3 多分支if语句 52
3.3.4 if语句的嵌套 52
3.4 switch语句 54
3.5 循环语句 55
3.5.1 while循环语句 55
3.5.2 do-while循环语句 56
3.5.3 for循环语句 57
3.5.4 循环嵌套 59
3.5.5 3种循环的比较 59
3.6 限定转向语句 60
3.6.1 break语句 60
3.6.2 continue语句 60
3.7 综合实例 61
3.8 小结 62
习题 62
第4章 函数 66
4.1 函数的定义 66
4.1.1 函数的定义 66
4.1.2 函数的参数 67
4.1.3 函数的返回值 68
4.2 函数的调用 68
4.2.1 函数的调用形式 68
4.2.2 函数的嵌套调用 70
4.2.3 函数的递归调用 71
4.3 内联函数 73
4.3.1 内联函数的定义方法 73
4.3.2 内联函数与普通函数的区别和联系 73
4.3.3 对内联函数的限制 73
4.4 带默认形参值的函数 74
4.4.1 默认参数的函数 74
4.4.2 使用默认参数的函数的注意事项 74
4.5 函数重载 75
4.5.1 函数重载定义 75
4.5.2 匹配重载函数的顺序 75
4.5.3 定义重载函数时的注意事项 76
4.6 变量的作用域与生存期 76
4.6.1 局部变量 77
4.6.2 静态局部变量 77
4.6.3 全局变量 78
4.6.4 静态全局变量 79
4.7 函数的作用域 80
4.7.1 只能被本文件调用的函数 80
4.7.2 可被其他文件调用的函数 80
4.8 编译预处理 81
4.8.1 宏定义命令 81
4.8.2 文件包含命令 82
4.8.3 条件编译命令 82
4.9 综合实例 84
4.10 小结 87
习题 87
第5章 构造数据类型 91
5.1 数组 91
5.1.1 一维数组的定义与引用 91
5.1.2 二维数组的定义与引用 94
5.1.3 字符数组与字符串 96
5.2 指针 102
5.2.1 指针变量的定义与使用 102
5.2.2 const指针 104
5.2.3 用指针作为函数的参数 105
5.2.4 数组的指针 106
5.2.5 数组名作函数参数 108
5.2.6 返回指针值的函数 113
5.2.7 函数的指针 114
5.2.8 指针与字符串 115
5.2.9 多重指针 117
5.2.10 动态内存分配 117
5.3 引用 119
5.3.1 引用的概念、声明和使用 119
5.3.2 引用与函数 121
5.3.3 const引用 124
5.3.4 引用总结 125
5.4 结构体、共用体和枚举 125
5.4.1 结构体 125
5.4.2 共用体 131
5.4.3 枚举类型 133
5.5 类型定义 134
5.6 综合实例 134
5.7 小结 136
习题 137
第6章 类和对象 141
6.1 类与对象的定义 141
6.1.1 类的定义 141
6.1.2 成员函数的定义 143
6.1.3 对象及指向对象的指针 145
6.1.4 访问对象的成员 146
6.1.5 指向类成员的指针 147
6.1.6 this指针 150
6.1.7 对象赋值语句 150
6.1.8 对象的作用域与生存期 151
6.2 构造函数与析构函数 152
6.2.1 构造函数 152
6.2.2 构造函数的重载 154
6.2.3 默认构造函数与缺省参数的构造函数 155
6.2.4 析构函数 156
6.2.5 拷贝构造函数 157
6.2.6 浅拷贝与深拷贝 161
6.3 对象成员及其初始化 163
6.3.1 对象成员 163
6.3.2 对象成员的初始化 164
6.4 类作用域 167
6.5 堆对象和对象数组 169
6.5.1 堆对象 169
6.5.2 对象数组 169
6.6 静态成员 171
6.6.1 静态数据成员 171
6.6.2 静态成员函数 173
6.7 友元函数和友元类 177
6.7.1 友元函数 177
6.7.2 友元类 179
6.8 常对象与常成员 181
6.8.1 常对象 181
6.8.2 常成员 181
6.9 综合实例 184
6.10 小结 187
习题 188
第7章 继承和派生 196
7.1 继承和派生的概念 196
7.2 单继承 197
7.2.1 单继承的定义方式 197
7.2.2 派生类的成员构成 199
7.2.3 继承方式对基类成员的访问属性控制 199
7.2.4 派生类的构造函数 206
7.2.5 有子对象的派生类的构造函数 210
7.2.6 派生类的析构函数 211
7.3 多重继承 212
7.3.1 多重继承的定义方式 212
7.3.2 多重继承的二义性 214
7.3.3 虚基类及其派生类的构造函数 216
7.4 虚函数与多态性 220
7.4.1 多态性 220
7.4.2 赋值兼容规则 221
7.4.3 用基类指针指向公有派生类对象 222
7.4.4 虚函数 224
7.4.5 纯虚函数与抽象类 226
7.5 综合实例 228
7.6 小结 234
习题 235
第8章 运算符重载 243
8.1 运算符重载的概念 243
8.2 重载为类的成员函数 243
8.3 重载为类的友元函数 244
8.4 运算符重载的限制 245
8.5 典型运算符重载 246
8.5.1 赋值运算符的重载 246
8.5.2 单目运算符的重载 247
8.6 综合实例 249
8.7 小结 251
习题 251
第9章 模板 253
9.1 类模板 254
9.1.1 类模板的定义 254
9.1.2 类模板的使用 254
9.2 函数模板 256
9.2.1 函数模板的定义 256
9.2.2 函数模板的使用 257
9.3 综合实例 258
9.4 小结 260
习题 261
第10章 文件 263
10.1 通过FILE结构进行文件操作 263
10.1.1 打开文件 264
10.1.2 关闭文件 265
10.1.3 文件的读写 266
10.2 通过文件流进行文件操作 269
10.2.1 流类库概述 269
10.2.2 打开文件 270
10.2.3 关闭文件 270
10.2.4 文件的读写 271
10.3 综合实例 273
10.4 小结 275
习题 275
第11章 string类与STL简介 278
11.1 string类 278
11.1.1 string类的构造函数 278
11.1.2 string类的成员函数 279
11.1.3 string类的运算符 280
11.2 标准模板库 281
11.2.1 范型化程序设计 281
11.2.2 标准模板库 282
11.2.3 容器 282
11.2.4 迭代器 284
11.2.5 算法 287
11.3 综合实例 288
11.4 小结 288
习题 289
第12章 异常处理 290
12.1 异常的概念 290
12.2 C++异常处理机制 290
12.2.1 异常处理的语法 291
12.2.2 使用多条catch语句 293
12.2.3 捕获所有类型的异常 294
12.3 限制异常与重抛异常 295
12.3.1 限制异常 295
12.3.2 重抛异常 296
12.4 异常处理中对象的构造和析构 296
12.5 综合实例 298
12.6 小结 299
习题 299
附录 301
附录1 ASCII字符表 301
附录2 C++部分库函数 302
参考文献 304