第1章 C++语言概述 1
1.1 面向对象程序设计的基本思想 1
1.1.1 C++的发展史 1
1.1.2 面向对象程序设计的基本概念 2
1.1.3 面向对象程序设计的三大特征 3
1.2 C++语言程序的特点 4
1.2.1 C++与C语言的关系 4
1.2.2 C++支持面向对象程序设计方法的特点 4
1.3 简单的C++程序介绍 5
1.4 C++程序的实现 8
1.4.1 C++程序的实现过程 8
1.4.2 Visual C++ 6.0的基本用法 9
1.5 小结 14
习题 14
第2章 数据类型、运算符及表达式 15
2.1 C++的数据类型 15
2.2 基本数据类型 16
2.3 常量和变量 16
2.3.1 常量 16
2.3.2 变量 18
2.4 数组 19
2.4.1 数值型数组 19
2.4.2 字符型数组 22
2.5 结构体 26
2.5.1 结构体类型的定义 26
2.5.2 结构体变量的定义方法 27
2.5.3 结构体变量的初始化 28
2.5.4 结构体变量的引用 29
2.5.5 结构体数组 30
2.6 共用体 32
2.6.1 共用体类型的定义 32
2.6.2 共用体变量的定义方法 33
2.6.3 共用体变量的引用 34
2.7 指针和引用类型 36
2.7.1 指针的概念 36
2.7.2 变量的指针和指向变量的指针变量 36
2.7.3 指向数值型数组的指针变量 37
2.7.4 字符串的指针和指向字符串的指针变量 42
2.7.5 指针数组和指向指针的指针 43
2.7.6 指向结构体类型的指针变量 46
2.7.7 函数的指针和指向函数的指针变量 47
2.7.8 返回指针值的函数 48
2.7.9 引用类型 48
2.7.10 类型定义 49
2.8 枚举类型 50
2.8.1 枚举类型的定义 50
2.8.2 枚举变量的定义 51
2.9 运算符及表达式 52
2.9.1 运算符的优先级和结合性 52
2.9.2 算术运算符及表达式 53
2.9.3 关系运算符及表达式 54
2.9.4 逻辑运算符及表达式 55
2.9.5 位运算符及表达式 56
2.9.6 赋值运算符及表达式 57
2.9.7 条件运算符及表达式 58
2.9.8 逗号运算符及表达式 58
2.9.9 sizeof运算符 59
2.10 小结 60
习题 60
第3章 预处理和语句 61
3.1 预处理功能 61
3.1.1 宏定义命令 61
3.1.2 文件包括命令 64
3.1.3 条件编译命令 65
3.2 C++语句概述 66
3.2.1 表达式语句 66
3.2.2 控制语句 67
3.2.3 复合语句(块语句) 67
3.3 选择语句 67
3.3.1 if语句的两种形式 67
3.3.2 if语句的嵌套 68
3.3.3 else~if结构 70
3.3.4 switch语句 71
3.4 循环语句 72
3.4.1 while语句 72
3.4.2 do~while语句 73
3.4.3 for语句 74
3.4.4 循环的嵌套 76
3.4.5 限定转向语句 76
3.5 小结 78
习题 79
第4章 函数 82
4.1 函数的定义 82
4.1.1 无参函数的定义 83
4.1.2 有参函数的定义 83
4.2 函数的参数和函数的返回值 84
4.2.1 形式参数和实际参数 84
4.2.2 函数的返回值 85
4.3 函数的调用 85
4.3.1 函数调用的形式 86
4.3.2 对被调函数的声明 87
4.3.3 函数的传值调用 88
4.3.4 函数的传址调用 89
4.3.5 函数的引用调用 91
4.4 内联函数 93
4.4.1 内联函数的定义 93
4.4.2 使用内联函数时的几点注意 93
4.5 函数重载 94
4.5.1 参数的个数相同而类型不同的重载函数 94
4.5.2 参数的类型相同而个数不同的重载函数 95
4.6 带有默认值参数的函数 96
4.7 函数的嵌套调用和函数的递归调用 97
4.7.1 函数的嵌套调用 97
4.7.2 函数的递归调用 98
4.8 作用域 99
4.8.1 作用域的种类 99
4.8.2 局部变量和全局变量 99
4.8.3 动态存储变量和静态存储变量 103
4.8.4 内部函数和外部函数 104
4.9 字符串处理函数 106
4.10 小结 108
习题 109
第5章 类和对象基础 112
5.1 简介 112
5.2 类的定义 112
5.2.1 类的定义格式 112
5.2.2 类和结构的比较 114
5.3 对象的创建和应用 115
5.3.1 如何生成一个对象 115
5.3.2 构造函数 116
5.3.3 析构函数 118
5.3.4 拷贝构造函数 119
5.4 成员的使用与特性 122
5.4.1 数据成员和成员函数小结 122
5.4.2 内联函数 122
5.4.3 成员函数的重载 123
5.4.4 带缺省值的成员函数 126
5.5 类的静态成员 127
5.5.1 静态数据成员 127
5.5.2 静态成员函数 128
5.6 友元 130
5.6.1 友元函数 130
5.6.2 友元类 134
5.7 类的作用域和对象的生存期 136
5.7.1 类的作用域 136
5.7.2 对象的生存期 137
5.7.3 局部类和嵌套类 138
5.8 小结 140
习题 140
第6章 类和复杂对象 145
6.1 对象的指针和引用 145
6.1.1 对象指针 145
6.1.2 对象引用 147
6.1.3 this指针 149
6.1.4 指向类成员的指针 150
6.2 数组 152
6.2.1 对象数组 152
6.2.2 指针数组 156
6.3 const类型 157
6.3.1 常对象 157
6.3.2 常成员 158
6.4 动态内存分配 161
6.4.1 new和delete运算符 161
6.4.2 链表 164
6.5 子对象 169
6.6 类型转换 170
6.6.1 转换构造函数 170
6.6.2 转换成员函数 171
6.6.3 类对象的转换 173
6.7 小结 175
习题 175
第7章 继承与派生 180
7.1 简介 180
7.2 基类和派生类 180
7.2.1 派生类的定义 180
7.2.2 继承方式与访问权限 182
7.2.3 基类和派生类的关系 185
7.3 简单继承 186
7.3.1 派生类对象的创建 186
7.3.2 子类型与类型适应 193
7.4 多继承 195
7.4.1 多继承的建立 195
7.4.2 多继承的二义性问题 199
7.5 虚基类 206
7.5.1 虚基类的引入 206
7.5.2 虚基类的构造函数 208
7.6 小结 215
习题 215
第8章 多态性 221
8.1 简介 221
8.2 运算符重载 221
8.2.1 运算符重载概论 221
8.2.2 运算符重载为成员函数 222
8.2.3 运算符重载为友元函数 226
8.2.4 成员运算符重载函数与友元运算符重载函数的比较 229
8.2.5 其他运算符重载 232
8.3 虚函数 241
8.3.1 虚函数的定义 241
8.3.2 动态联编 243
8.4 抽象类 254
8.4.1 纯虚函数 254
8.4.2 抽象类和具体类 257
8.5 程序实例 263
8.6 小结 268
习题 269
第9章 模板 273
9.1 简介 273
9.2 函数模板 273
9.2.1 函数模板的定义 273
9.2.2 函数模板的重载 275
9.3 类模板 276
9.3.1 类模板的定义 276
9.3.2 友元和静态成员 278
9.4 模板类之间的关系 279
9.5 实例:模拟堆栈 281
9.6 小结 283
习题 284
第10章 I/O流 286
10.1 简介 286
10.2 输出流 287
10.2.1 插入运算符 287
10.2.2 输出流的部分成员函数 288
10.3 输入流 289
10.3.1 提取运算符 289
10.3.2 输入流的部分成员函数 290
10.4 插入运算符与提取运算符的重载 293
10.5 流操纵算子与格式控制 295
10.5.1 常用流操纵算子 295
10.5.2 状态标志 298
10.6 文件处理 302
10.6.1 文件的打开和关闭 302
10.6.2 文件的读写操作 304
10.6.3 文件的顺序访问和随机访问 308
10.7 字符串流 312
10.7.1 ostrstream类的构造函数 312
10.7.2 istrstream类的构造函数 313
10.8 流错误处理 314
10.9 小结 315
习题 315
习题答案 317
附录 ASCII码表 344
参考文献 345