第1章 C++编程基础 1
1.1 程序语言的发展 1
1.1.1 机器语言 1
1.1.2 汇编语言 1
1.1.3 高级语言 2
1.1.4 C语言 2
1.1.5 C++语言 2
1.2 C++语言简介 3
1.2.1 程序=数据+操作 3
1.2.2 数据类型 3
1.2.3 对数据的操作——表达式 3
1.2.4 数据操作的流程——语句控制 3
1.2.5 操作的复用——函数 3
1.2.6 数据和操作的封装——类 3
1.2.7 类的复用——派生和继承 3
1.2.8 软件模块 4
1.3 如何学习C++语言 4
1.3.1 勤能生巧 4
1.3.2 风格与规范 4
1.4 用Visual C++开发程序 4
1.4.1 程序——从概念到运行 4
1.4.2 Visual C++简介 5
1.4.3 建立应用程序 5
1.5 程序风格 7
1.5.1 效率与风格 7
1.5.2 注释——整理编程思路、增加程序的可读性 7
1.5.3 注释的形式 8
1.5.4 命名 13
1.5.5 编排 14
1.5.6 简单性原则 15
1.5.7 一致性原则 16
小结 17
第2章 基本C++程序结构 18
2.1 C++语言成分 18
2.1.1 字符 18
2.1.2 数字、标识符和表达式 18
2.1.3 语法 19
2.1.4 结构 19
2.1.5 模块 19
2.2 程序的基本结构 19
2.2.1 注释 20
2.2.2 编译预处理命令#include 20
2.2.3 main函数 20
2.2.4 C++程序的执行过程 21
2.2.5 终端输出 22
2.3 变量和简单表达式 23
2.3.1 main函数的返回值 24
2.3.2 常数和常量 24
2.3.3 变量 27
2.3.4 运算符与简单表达式 29
2.4 表达式和语句 31
2.4.1 返回值 31
2.4.2 嵌套 31
2.4.3 优先级 31
2.4.4 结合性 32
2.4.5 括号与次序 32
2.4.6 操作数 32
小结 32
习题 33
第3章 数据类型 36
3.1 数据及操作 36
3.2 C++数据类型 36
3.3 数据类型 37
3.3.1 数据在计算机中的存储 37
3.3.2 基本数据类型的修饰符号 38
3.3.3 基本数据类型 39
3.3.4 C++中的特殊字符 41
3.3.5 字符串 42
3.3.6 数据类型长度的确定 42
3.3.7 数据类型的选择 43
3.4 构造数据类型 44
3.4.1 数组 44
3.4.2 枚举 44
3.4.3 结构 46
3.5 数据输入 46
小结 48
第4章 程序流程控制 50
4.1 复合语句 50
4.2 程序的执行流程 51
4.3 分支流程 51
4.3.1 if语句 52
4.3.2 switch语句 55
4.4 循环流程 57
4.4.1 while语句 58
4.4.2 do…while语句 62
4.4.3 for循环 65
4.5 设计举例 68
4.6 其他控制语句 73
4.6.1 break语句与多重循环 73
4.6.2 goto语句 74
4.6.3 条件运算符?: 74
小结 75
第5章 函数 77
5.1 函数机制 77
5.2 函数定义 78
5.2.1 函数名 79
5.2.2 函数参数 79
5.2.3 返回类型 80
5.2.4 函数体 80
5.3 函数调用 82
5.4 程序运行时的内存分布 83
5.5 函数调用的实现机制 84
5.6 函数的参数与返回值 88
5.7 函数参数的传递方式 88
5.7.1 指针参数 88
5.7.2 引用参数 90
5.7.3 数组参数 92
5.7.4 数组参数对实在参数的改变 94
5.7.5 字符串作为参数 94
5.7.6 多维数组作为参数 96
5.7.7 main()的参数 97
5.8 函数返回值 98
5.9 const参数、const返回值与const函数 100
5.9.1 const参数 100
5.9.2 const返回值 101
5.9.3 const函数 101
5.10 作用域 102
5.10.1 局部作用域 103
5.10.2 文件作用域 104
5.10.3 覆盖问题 106
5.11 函数原型 109
5.11.1 函数作用域 109
5.11.2 函数原型 110
5.11.3 函数原型的作用 110
5.11.4 使用自己定义的函数原型 115
5.12 特殊的函数用法 115
5.12.1 内联函数 115
5.12.2 内联函数的作用 115
5.12.3 内联函数使用的限制 116
5.12.4 函数重载 116
5.12.5 使用函数重载的条件 117
5.12.6 重载函数的使用方法 117
5.12.7 函数的默认参数 118
5.12.8 递归函数 120
5.12.9 设计递归程序的方法 121
5.12.10 递归程序的优缺点 123
5.12.11 函数模板 123
5.12.12 模板的实例化 125
5.12.13 支持多种类型的模板 126
5.12.14 使用模板的注意事项 127
小结 127
第6章 简单程序设计 129
6.1 程序开发过程 129
6.2 文件之间的信息共享 130
6.2.1 外部变量 130
6.2.2 外部函数 132
6.2.3 静态全局变量与静态函数 133
6.3 头文件 135
6.3.1 #include指令 135
6.3.2 头文件内容 136
6.3.3 预编译指令 138
6.4 生存期 141
6.4.1 生存期与内存 142
6.4.2 初始化问题 143
6.4.3 局部静态变量 143
小结 144
第7章 数组与结构 146
7.1 数组 146
7.1.1 数组的定义 146
7.1.2 数组元素的访问 147
7.1.3 数组复制 149
7.1.4 数组下标越界 149
7.1.5 数组元素的初始化 150
7.1.6 多维数组 151
7.1.7 多维数组元素的访问 151
7.1.8 多维数组元素的初始化 156
7.1.9 字符串数组 156
7.1.10 数组应用举例 158
7.2 结构 162
7.2.1 结构类型的定义 162
7.2.2 结构成员的访问 163
7.2.3 结构变量的初始化 163
7.2.4 结构的赋值 164
7.2.5 结构成员 166
7.2.6 结构嵌套 167
小结 167
第8章 指针及其引用 169
8.1 指针的定义与初始化 169
8.2 指针的赋值与使用 171
8.3 指针的数据类型 174
8.3.1 void指针 176
8.3.2 NULL指针值 176
8.4 用const来限定指针 177
8.4.1 指向常量的指针 177
8.4.2 指针常量 178
8.4.3 指向常量的指针常量 178
8.5 指针与数组 179
8.5.1 指针运算 181
8.5.2 用指针对数组操作 183
8.5.3 指针与字符串 184
8.6 动态内存申请 185
8.6.1 new与delete 186
8.6.2 指针与动态数组 189
8.6.3 指针与动态结构 194
8.6.4 指针小结 201
8.7 引用的概念 201
8.7.1 引用的初始化 202
8.7.2 能够引用的数据类型 203
8.7.3 const引用 204
8.8 指针和引用 205
8.9 引用的应用 206
小结 206
第9章 面向对象程序方法 207
9.1 面向对象方法概述 207
9.1.1 面向对象的概念 207
9.1.2 面向对象方法的形成 209
9.2 面向对象方法的基本概念 210
9.2.1 对象 211
9.2.2 程序设计语言中的对象 211
9.2.3 消息 212
9.2.4 程序设计语言中的消息 212
9.2.5 类 213
9.2.6 程序设计语言中的类 213
9.2.7 继承 214
9.2.8 程序设计语言中的继承 215
9.2.9 封装 215
9.2.10 程序设计语言中的封装 216
9.2.11 多态性 216
9.2.12 程序设计语言中的多态性 217
9.3 面向对象的意义 217
9.3.1 模块化——软件质量保证 217
9.3.2 复用——软件快速开发的必由之路 218
9.3.3 走面向对象的道路 218
9.3.4 结构化程序设计 219
9.3.5 面向对象程序设计 220
9.4 面向对象的分析与设计 221
9.4.1 面向对象开发方法的生命周期 221
9.4.2 面向对象分析 221
9.4.3 面向对象设计 222
9.5 面向对象方法与软件复用 222
9.5.1 复用级别 222
9.5.2 复用的好处 223
9.5.3 面向对象方法对复用的支持 223
9.5.4 复用技术对面向对象软件开发的支持 224
9.6 面向对象程序设计语言 224
小结 225
第10章 类与对象 226
10.1 类的定义与使用 226
10.2 成员的访问控制 227
10.3 类的成员函数 231
10.3.1 成员函数的定义位置 231
10.3.2 类作用域 232
10.3.3 内联成员函数与非内联成员函数 235
10.3.4 使用内联函数的条件 236
10.3.5 const成员函数 238
10.4 类定义与头文件 240
10.4.1 使用类库中的类 243
10.4.2 类与程序结构 244
10.5 对象的创建与使用 245
10.5.1 对象的创建 245
10.5.2 对象作为函数的参数与返回值 246
10.6 this指针 247
10.7 类与结构的关系 250
10.8 举例 252
10.8.1 用数组实现的队列类 253
10.8.2 用链表实现的队列类 259
小结 265
第11章 构造函数与析构函数 267
11.1 构造函数和析构函数的意义 267
11.2 构造函数 270
11.2.1 重载构造函数 270
11.2.2 对象构造的几种方式 274
11.2.3 构造函数的默认参数 274
11.2.4 默认构造函数 275
11.2.5 拷贝构造函数 277
11.2.6 成员初始化参数表 280
11.3 析构函数 285
小结 295
第12章 静态成员、友元 297
12.1 静态成员 297
12.1.1 静态数据成员与静态函数成员 298
12.1.2 静态数据成员的初始化 299
12.2 友元 306
12.2.1 友元的说明与使用 306
12.2.2 使用友元的条件 311
12.2.3 使用友元的注意事项 311
小结 313
第13章 运算符重载 314
13.1 可以重载的运算符 314
13.2 运算符重载的规则 316
13.3 常用运算符重载举例 319
13.3.1 函数调用运算符的重载 320
13.3.2 赋值运算符的重载 323
13.3.3 双目算术运算符的重载 325
13.3.4 单目算术运算符的重载 327
13.3.5 自增自减运算符的重载 328
13.4 插入抽取运算符的重载 337
13.4.1 C++的I/O流库 338
13.4.2 插入运算符的重载 339
13.4.3 抽取运算符的重载 341
13.5 类型转换函数 345
13.5.1 构造函数充当类型转换函数 346
13.5.2 直接定义类型转换函数 347
13.5.3 隐式类型转换与显式类型转换 349
小结 350
第14章 继承 352
14.1 单继承 352
14.1.1 公有、保护和私有继承 354
14.1.2 派生类对象的构造 361
14.1.3 继承应用举例 368
14.2 多继承 372
14.2.1 多继承的定义 373
14.2.2 多继承中的构造函数与析构函数 373
14.2.3 二义性 376
14.2.4 虚基类 379
14.2.5 虚基类的初始化 380
14.2.6 多继承的应用 381
14.3 继承与类库 381
14.4 Visual C++的类库——MFC 382
小结 383
自测题答案 384
参考文献 421