第1章 C++概述 1
1.1 计算机系统的组成 1
1.1.1 中央处理单元 2
1.1.2 主存 2
1.1.3 输入输出设备 2
1.1.4 辅助存储器 2
1.2 程序设计语言和程序设计方法 3
1.2.1 程序和程序设计语言 3
1.2.2 结构化程序设计 4
1.2.3 面向对象的程序设计 4
1.3 C++的发展历史 5
1.4 C++的特点 6
1.4.1 跟C相比的一些特点 6
1.4.2 与面向对象有关的一些特点 8
1.5 C++程序结构 8
1.5.1 一个简单的C++程序 9
1.5.2 C++程序的组成 10
1.5.3 C++程序的书写格式 11
1.6 C++程序开发过程 11
练习题1 14
第2章 C++的基本要素 15
2.1 标识符 15
2.2 C++数据类型 16
2.2.1 C++内部数据类型 16
2.2.2 修饰符 17
2.3 变量 18
2.3.1 变量的概念 18
2.3.2 变量的声明和定义 19
2.4 常量 20
2.4.1 文字常量 20
2.4.2 名字常量 22
2.5 运算符和表达式 22
2.5.1 算术运算符 22
2.5.2 赋值运算符 23
2.5.3 关系运算符 24
2.5.4 逻辑运算符 24
2.5.5 自增、自减运算符 25
2.5.6 条件运算符 25
2.5.7 逗号运算符 26
2.5.8 位运算符 26
2.5.9 sizeof运算符 27
2.5.10 运算符优先级 28
2.5.11 数据类型转换 29
练习题2 32
第3章 输入和输出语句 34
3.1 I/O数据流和标准I/O设备 34
3.2 输出 35
3.2.1 使用I/O操作符 35
3.2.2 使用ios成员函数 38
3.2.3 使用cout的相关函数 41
3.3 输入 43
3.3.1 使用I/O操作符 43
3.3.2 使用cin的成员函数 44
练习题3 45
第4章 控制语句 48
4.1 顺序控制语句 48
4.1.1 表达式语句 48
4.1.2 函数调用语句 49
4.1.3 空语句 49
4.1.4 复合语句 49
4.2 选择控制语句 49
4.2.1 if语句 49
4.2.2 if...else语句 50
4.2.3 if...else if语句 51
4.2.4 switch语句 53
4.3 循环控制语句 55
4.3.1 while语句 55
4.3.2 do-while语句 56
4.3.3 for语句 57
4.4 跳转语句 59
4.4.1 break语句 59
4.4.2 continue语句 59
4.4.3 goto语句 60
练习题4 61
第5章 函数和预处理 66
5.1 函数概述 66
5.2 函数的定义和调用 67
5.2.1 函数定义 67
5.2.2 函数声明 68
5.2.3 函数调用 68
5.3 函数的参数传递 69
5.3.1 函数调用机制 69
5.3.2 参数传递的几种方式 70
5.4 函数传递和返回const值 74
5.4.1 传递const值 74
5.4.2 返回const值 74
5.5 局部变量和全局变量 75
5.5.1 局部变量 75
5.5.2 全局变量 76
5.6 变量的存储类别 77
5.6.1 作用域和生存期 78
5.6.2 局部变量的存储类别 79
5.6.3 全局变量的存储类别 81
5.7 多文件程序中函数的声明 83
5.8 函数的默认参数值 84
5.9 内联函数 86
5.10 递归函数 87
5.11 函数重载 89
5.12 文件与预处理 90
5.12.1 宏定义命令 90
5.12.2 文件包含命令 91
5.12.3 条件编译命令 92
5.12.4 断言 94
练习题5 95
第6章 数组 101
6.1 一维数组 101
6.1.1 一维数组的定义 101
6.1.2 一维数组的初始化 102
6.1.3 一维数组的赋值 102
6.1.4 一组数组的越界 102
6.1.5 一组数组应用示例 103
6.2 二维数组 106
6.2.1 二维数组的定义 106
6.2.2 二维数组的初始化 106
6.2.3 省略第一维大小 107
6.2.4 二组数组的应用示例 107
6.3 多维数组 108
6.4 数组作为函数参数 110
6.5 字符数组和字符串数组 111
6.5.1 字符数组 111
6.5.2 字符串数组 116
练习题6 118
第7章 指针 122
7.1 什么是指针 122
7.2 指针变量的定义和初始化 123
7.2.1 指针变量的定义 123
7.2.2 指针变量的运算 123
7.2.3 指针变量的初始化 126
7.3 指针和数组的关系 128
7.4 指针和动态数组 130
7.4.1 用new与delete运算符为指针分配、释放内存 130
7.4.2 直接用指针变量操作数据 131
7.4.3 动态数组 132
7.4.4 指针的浅复制与深复制 133
7.5 const指针 135
7.5.1 指向常量的指针变量 135
7.5.2 指针常量 136
7.6 指针变量与函数 136
7.6.1 指针变量作为函数参数 137
7.6.2 指针型函数 137
7.6.3 函数指针 138
7.7 指针与多维数组 139
7.7.1 指向数组元素的指针 140
7.7.2 指针数组 140
7.7.3 数组指针 141
练习题7 143
第8章 结构体和共用体 148
8.1 结构体 148
8.1.1 结构体类型声明 148
8.1.2 结构体变量定义 149
8.1.3 结构体变量的使用 150
8.1.4 结构体数组 153
8.1.5 结构体指针变量 154
8.2 位域 159
8.3 共用体 161
8.4 枚举类型 163
8.5 用typedef定义类型 164
练习题8 164
第9章 类和对象 170
9.1 类 170
9.1.1 类的声明 170
9.1.2 用文件组织类 172
9.1.3 标识符的类作用域 173
9.1.4 类的成员函数 173
9.1.5 访问权限 174
9.1.6 类中公有和私有的顺序 175
9.1.7 类与结构体类型的区别 175
9.2 对象 175
9.2.1 对象的定义格式 175
9.2.2 对象的数据成员访问方法 176
9.2.3 对象的成员函数调用方法 176
9.2.4 类对象的存储空间 177
9.2.5 类对象的赋值运算 179
9.2.6 对象的生存期 179
9.3 构造函数 180
9.3.1 什么是构造函数 180
9.3.2 调用构造函数 181
9.3.3 构造函数的默认参数 183
9.3.4 重载构造函数 183
9.3.5 类对象数组和构造函数 184
9.3.6 复制构造函数 186
9.4 析构函数 187
9.4.1 什么是析构函数 187
9.4.2 析构函数的性质 188
9.4.3 默认析构函数 189
9.5 对象浅复制与深复制 189
9.5.1 对象浅复制 189
9.5.2 对象深复制 191
9.6 常类型 192
9.6.1 常对象 192
9.6.2 常对象成员 193
9.7 静态成员 195
9.7.1 静态数据成员 195
9.7.2 静态成员函数 196
9.8 类成员指针 198
9.8.1 类数据成员指针 199
9.8.2 类成员函数指针 199
9.9 子对象 200
9.9.1 has-a关系 200
9.9.2 子对象构造函数的设计和执行次序 202
9.9.3 子对象析构函数的设计和执行次序 203
9.10 嵌套类和局部类 204
9.10.1 嵌套类 204
9.10.2 局部类 206
9.11 this指针 206
9.12 类和对象的应用实例 209
练习题9 212
第10章 引用 220
10.1 引用的概念 220
10.1.1 建立引用的方法 220
10.1.2 引用的特点 220
10.2 引用类型及限制 222
10.2.1 指针引用 222
10.2.2 对象引用 223
10.2.3 引用类型的限制 224
10.3 引用作为函数参数 225
10.3.1 变量引用作为函数参数 225
10.3.2 对象引用作为函数参数 227
10.4 引用返回值 227
10.5 常引用 229
10.6 引用的应用实例 230
练习题10 232
第11章 友元 236
11.1 友元函数 236
11.2 友元类 238
11.3 友元应用实例 240
练习题11 243
第12章 运算符重载 246
12.1 运算符重载概述 246
12.2 重载单目运算符 249
12.2.1 重载++、--单目运算符 249
12.2.2 重载->单目运算符 250
12.3 重载双目运算符 251
12.3.1 重载双目运算符为成员函数 251
12.3.2 重载双目运算符为友元函数 256
12.4 重载比较运算符 257
12.5 重载赋值运算符 259
12.5.1 重载运算符“+=”和“-=” 259
12.5.2 重载运算符“=” 260
12.6 重载下标运算符 262
12.7 重载运算符new与delete 263
12.8 重载逗号运算符 265
12.9 重载类型转换运算符 266
12.10 重载函数调用运算符 267
12.11 运算符重载应用实例 268
练习题12 272
第13章 模板 276
13.1 模板的概念 276
13.2 函数模板 277
13.2.1 声明函数模板 277
13.2.2 编写函数模板方法 278
13.2.3 使用函数模板 278
13.2.4 用户定义的参数类型 282
13.3 类模板 283
13.3.1 声明类模板 283
13.3.2 使用类模板 284
13.4 类模板作为函数参数 286
13.5 类模板的友元函数 287
13.6 模板应用实例 287
练习题13 290
第14章 派生和继承 293
14.1 继承的概念 293
14.2 派生类 294
14.2.1 派生类的定义格式 294
14.2.2 派生类生成过程 295
14.2.3 类成员访问权限 296
14.3 继承方式 297
14.3.1 公有继承 297
14.3.2 私有继承 297
14.3.3 保护继承 297
14.3.4 继承方式小结 298
14.4 派生类继承成员的调整 300
14.4.1 恢复访问权限 300
14.4.2 继承成员的重定义 301
14.4.3 继承成员的重命名 302
14.4.4 屏蔽继承成员 302
14.5 派生类对象的存储组织 302
14.6 派生类的构造函数 304
14.7 派生类的析构函数 307
14.8 基类对象和派生类对象的使用关系 309
14.8.1 派生类对象能作为基类对象处理 309
14.8.2 用基类指针指向一个派生类对象 310
14.8.3 用派生类指针强制指向基类的对象 312
14.9 类层次中的类模板 313
14.9.1 从模板类派生类模板 313
14.9.2 从非模板类派生类模板 314
14.9.3 从类模板派生非模板类 315
14.10 虚基类 315
14.10.1 重复继承的二义性问题 316
14.10.2 作用域分辨符 316
14.10.3 虚基类 317
14.11 派生和继承应用实例 324
练习题14 328
第15章 虚函数和抽象类 334
15.1 函数绑定 334
15.2 虚函数及其限制 337
15.2.1 虚函数声明 337
15.2.2 多继承中的虚函数 339
15.2.3 虚函数的限制 342
15.3 纯虚函数和抽象类 344
15.3.1 纯虚函数 344
15.3.2 抽象类 346
15.4 抽象类应用实例 347
练习题15 351
第16章 C++文件流 354
16.1 什么是文件流 354
16.2 C++的流类库 355
16.3 文件操作 356
16.3.1 文件的打开与关闭 356
16.3.2 文本文件的读写 358
16.3.3 二进制文件的读写 363
16.4 文件的随机读写 364
16.4.1 输出流随机访问函数 364
16.4.2 输入流随机访问函数 365
16.5 重载I/O运算符 367
16.5.1 重载输出运算符“<<” 367
16.5.2 重载输入运算符“>>” 368
16.6 文件流应用实例 373
练习题16 375
第17章 异常处理 378
17.1 异常处理概述 378
17.2 C++异常处理的实现 379
17.2.1 异常处理的语法 379
17.2.2 捕获所有类型的异常 382
17.2.3 带有异常声明的函数原型 383
17.3 异常处理中对象的构造与析构 384
17.4 异常处理应用实例 386
练习题17 388
第18章 名字空间 391
18.1 名字空间概述 391
18.1.1 定义名字空间 391
18.1.2 访问名字空间成员 392
18.1.3 未命名的名字空间 396
18.2 名字空间的嵌套 397
18.3 std名字空间 399
练习题18 401
参考文献 403