第一部分 C++入门 2
第1章 编写第一个程序 2
1.1 使用C++ 2
1.2 寻找编译器 3
1.3 编译和链接源代码 5
1.4 创建您的第一个程序 5
1.5 总结 6
1.6 问与答 7
1.7 作业 7
1.7.1 测验 7
1.7.2 答案 8
1.7.3 练习 8
第2章 程序的组成部分 9
2.1 使用C++的原因 9
2.1.1 编程风格 10
2.1.2 C++和面向对象编程 11
2.2 程序的组成部分 12
2.2.1 预处理器编译指令 12
2.2.2 源代码行 13
2.3 注释 13
2.4 函数 14
2.5 总结 16
2.6 问与答 16
2.7 作业 17
2.7.1 测验 17
2.7.2 答案 18
2.7.3 练习 18
第3章 创建变量和常量 19
3.1 变量是什么 19
3.1.1 在内存中存储变量 20
3.1.2 无符号变量和带符号变量 21
3.1.3 变量类型 21
3.2 定义变量 22
3.3 给变量赋值 23
3.4 使用类型定义 24
3.5 常量 25
3.5.1 定义常量 26
3.5.2 枚举常量 26
3.6 总结 26
3.7 问与答 27
3.8 作业 27
3.8.1 测验 27
3.8.2 答案 28
3.8.3 练习 28
第4章 使用表达式、语句和运算符 29
4.1 语句 29
4.1.1 空白 29
4.1.2 复合语句 30
4.2 表达式 30
4.3 运算符 31
4.3.1 赋值运算符 31
4.3.2 数学运算符 31
4.3.3 组合运算符 32
4.3.4 递增和递减运算符 32
4.3.5 前缀运算符和后缀运算符 32
4.3.6 运算符优先级 34
4.3.7 关系运算符 36
4.4 if-else条件语句 36
4.4.1 else子句 37
4.4.2 复合if语句 37
4.5 逻辑运算符 39
4.5.1 与运算符 39
4.5.2 或运算符 39
4.5.3 非运算符 39
4.5.4 关系运算符和逻辑运算符的优先级 40
4.6 棘手的表达式值 40
4.7 总结 40
4.8 问与答 41
4.9 作业 41
4.9.1 测验 41
4.9.2 答案 42
4.9.3 练习 42
第5章 调用函数 43
5.1 函数是什么 43
5.2 声明和定义函数 43
5.3 在函数中使用变量 45
5.3.1 局部变量 45
5.3.2 全局变量 46
5.4 函数参数 47
5.5 从函数返回值 48
5.6 默认函数参数 50
5.7 函数重载 51
5.8 总结 52
5.9 问与答 53
5.10 作业 53
5.10.1 测验 53
5.10.2 答案 54
5.10.3 练习 54
第6章 控制程序流程 55
6.1 循环 55
6.2 while循环 55
6.2.1 退出循环 56
6.2.2 跳到下一次循环 57
6.3 do-while循环 58
6.4 for循环 59
6.4.1 高级for循环 61
6.4.2 嵌套循环 61
6.5 switch语句 62
6.6 总结 64
6.7 问与答 64
6.8 作业 65
6.8.1 测验 65
6.8.2 答案 65
6.8.3 练习 66
第7章 使用数组和字符串存储信息 67
7.1 数组是什么 67
7.2 写入时超过数组末尾 69
7.3 初始化数组 69
7.4 多维数组 70
7.4.1 初始化多维数组 71
7.4.2 内存简介 72
7.5 字符数组 72
7.6 复制字符串 74
7.7 总结 75
7.8 问与答 75
7.9 作业 75
7.9.1 测验 75
7.9.2 答案 76
7.9.3 练习 76
第二部分 类 78
第8章 创建基本类 78
8.1 类型是什么 78
8.2 创建新类型 78
8.3 类和成员 79
8.3.1 声明类 79
8.3.2 创建对象 80
8.4 访问类成员 80
8.5 实现成员函数 81
8.6 创建和删除对象 83
8.6.1 默认构造函数 84
8.6.2 编译器提供的构造函数 84
8.7 总结 86
8.8 问与答 87
8.9 作业 87
8.9.1 测验 87
8.9.2 答案 87
8.9.3 练习 88
第9章 高级类 89
9.1 const成员函数 89
9.2 接口和实现 90
9.3 组织类声明和函数定义 90
9.4 内联实现 90
9.5 将其他类用作成员数据的类 92
9.6 总结 96
9.7 问与答 96
9.8 作业 96
9.8.1 测验 96
9.8.2 答案 97
9.8.3 练习 97
第三部分 内存管理 100
第10章 创建指针 100
10.1 理解指针及其用途 100
10.1.1 在指针中存储地址 102
10.1.2 间接运算符(间接地使用指针) 103
10.1.3 指针、地址和变量 104
10.1.4 使用指针操作数据 105
10.1.5 查看存储在指针中的地址 105
10.1.6 为何使用指针 107
10.2 栈和堆 107
10.2.1 使用关键字new 108
10.2.2 使用关键字delete 109
10.2.3 避免内存泄露 110
10.3 总结 111
10.4 问与答 111
10.5 作业 111
10.5.1 测验 111
10.5.2 答案 112
10.5.3 练习 112
第11章 开发高级指针 113
11.1 在堆中创建对象 113
11.2 删除对象 113
11.3 使用指针访问数据成员 114
11.4 堆中的数据成员 115
11.5 this指针 117
11.6 悬摆指针 118
11.7 const指针 118
11.8 const指针和const成员函数 119
11.9 总结 120
11.10 问与答 121
11.11 作业 121
11.11.1 测验 121
11.11.2 答案 121
11.11.3 练习 122
第12章 创建引用 123
12.1 什么是引用 123
12.2 创建引用 123
12.3 将地址运算符用于引用 124
12.4 可引用的目标 126
12.5 空指针和空引用 127
12.6 按引用传递函数参数 127
12.6.1 使用指针实现swap() 128
12.6.2 使用引用实现swap() 129
12.7 理解函数头和原型 130
12.8 返回多个值 130
12.9 总结 133
12.10 问与答 133
12.11 作业 133
12.11.1 测验 133
12.11.2 答案 134
12.11.3 练习 134
第13章 高级引用和指针 135
13.1 按引用传递以提高效率 135
13.2 传递const指针 137
13.3 作为指针替代品的引用 139
13.4 什么情况下使用引用以及什么情况下使用指针 141
13.5 不要返回不在作用域内的引用 141
13.6 返回指向堆中对象的引用 142
13.7 谁拥有指针 143
13.8 总结 144
13.9 问与答 144
13.10 作业 144
13.10.1 测验 144
13.10.2 答案 145
13.10.3 练习 145
第四部分 高级C++ 148
第14章 高级函数 148
14.1 重载成员函数 148
14.2 使用默认值 150
14.3 初始化对象 151
14.4 复制构造函数 152
14.5 总结 155
14.6 问与答 155
14.7 作业 155
14.7.1 测验 156
14.7.2 答案 156
14.7.3 练习 156
第15章 运算符重载 157
15.1 重载运算符 157
15.1.1 编写递增方法 158
15.1.2 重载后缀运算符 160
15.1.3 重载加法运算符 161
15.1.4 对运算符重载的限制 162
15.1.5 赋值运算符 163
15.2 转换运算符 165
15.3 总结 167
15.4 问与答 168
15.5 作业 168
15.5.1 测验 168
15.5.2 答案 168
15.5.3 练习 169
第五部分 继承和多态 172
第16章 使用继承扩展类 172
16.1 什么是继承 172
16.1.1 继承和派生 173
16.1.2 动物和继承 173
16.1.3 派生语法 173
16.2 私有和保护 175
16.3 构造函数和析构函数 176
16.4 将参数传递给基类构造函数 178
16.5 重写函数 181
16.5.1 重载和重写 183
16.5.2 隐藏基类方法 183
16.5.3 调用基类方法 184
16.6 总结 185
16.7 问与答 185
16.8 作业 185
16.8.1 测验 186
16.8.2 答案 186
16.8.3 练习 186
第17章 使用多态和派生类 187
17.1 使用虚函数实现多态 187
17.2 虚成员函数的工作原理 190
17.2.1 不能通过基类指针访问派生类特有的方法 191
17.2.2 切除 191
17.2.3 虚析构函数 193
17.2.4 虚复制构造函数 193
17.2.5 使用虚成员函数的代价 196
17.3 总结 196
17.4 问与答 196
17.5 作业 196
17.5.1 测验 196
17.5.2 答案 197
17.5.3 练习 197
第18章 使用高级多态 198
18.1 单继承存在的问题 198
18.2 抽象数据类型 201
18.2.1 纯虚函数 203
18.2.2 实现纯虚函数 204
18.2.3 复杂的抽象层次结构 206
18.2.4 哪些类是抽象的 209
18.3 总结 210
18.4 问与答 210
18.5 作业 210
18.5.1 测验 210
18.5.2 答案 211
18.5.3 练习 211
第19章 使用链表存储信息 212
19.1 链表和其他结构 212
19.2 链表案例研究 213
19.2.1 委托 213
19.2.2 链表的组成部分 213
19.3 作为对象的链表 219
19.4 总结 220
19.5 问与答 220
19.6 作业 220
19.6.1 测验 221
19.6.2 答案 221
19.6.3 练习 221
第六部分 特殊主题 224
第20章 使用特殊的类、函数和指针 224
20.1 静态成员数据 224
20.2 静态成员函数 226
20.3 将其他类对象作为成员 227
20.3.1 访问被包含类的成员 231
20.3.2 禁止访问包含类的成员 232
20.3.3 按引用还是按值复制 232
20.4 友元类和友元函数 232
20.5 函数指针 233
20.5.1 函数指针数组 235
20.5.2 将函数指针传递给其他函数 237
20.5.3 将typedef用于函数指针 239
20.5.4 成员函数指针 239
20.5.5 成员函数指针数组 241
20.6 总结 242
20.7 问与答 243
20.8 作业 243
20.8.1 问与答 243
20.8.2 答案 244
20.8.3 练习 244
第21章 使用C++0x新增的功能 245
21.1 下一版C++ 245
21.2 空指针常量 245
21.3 编译阶段常量表达式 247
21.4 自动确定类型的变量 248
21.5 新的for循环 250
21.6 总结 250
21.7 问与答 251
21.8 作业 251
21.8.1 测验 251
21.8.2 答案 252
21.8.3 练习 252
第22章 面向对象分析和设计 253
22.1 开发周期 253
22.2 模拟报警系统 253
22.2.1 概念化 254
22.2.2 分析和需求 254
22.2.3 高级设计和详细设计 254
22.2.4 其他对象 255
22.2.5 设计类 255
22.2.6 添加其他类 256
22.2.7 事件循环 256
22.3 案例研究 258
22.3.1 三思而后行 259
22.3.2 分而治之 259
22.3.3 邮件格式 259
22.3.4 初步类设计 260
22.3.5 同根和不同根 261
22.3.6 设计接口 262
22.3.7 建立原型 263
22.3.8 80/80规则 263
22.3.9 设计PostMasterMessage类 264
22.3.10 应用程序编程接口 264
22.3.11 小组编程 265
22.3.12 需要不断考虑的设计因素 265
22.3.13 使用驱动程序 266
22.4 总结 271
22.5 问与答 271
22.6 作业 272
22.6.1 测验 272
22.6.2 答案 272
22.6.3 练习 272
第23章 创建模板 273
23.1 什么是模板 273
23.2 模板实例 273
23.3 模板的定义 274
23.4 使用模板实例 279
23.5 总结 283
23.6 问与答 284
23.7 作业 284
23.7.1 测验 284
23.7.2 答案 284
23.7.3 练习 285
第24章 处理异常和错误 286
24.1 程序中的各种错误 286
24.2 处理意外情况 287
24.3 异常 287
24.4 使用try块和catch块 290
24.4.1 捕获异常 291
24.4.2 使用多条catch语句 291
24.4.3 使用引用以多态方式捕获异常 291
24.5 编写专业级代码 295
24.5.1 大括号 295
24.5.2 长代码行 295
24.5.3 switch语句 296
24.5.4 程序文本 296
24.5.5 标识符命名 297
24.5.6 名称的拼写和大写 297
24.5.7 注释 297
24.5.8 设置访问权限 298
24.5.9 类定义 298
24.5.10 包含文件 298
24.5.11 使用const 298
24.6 总结 299
24.7 问与答 299
24.8 作业 299
24.8.1 测验 299
24.8.2 答案 300
24.8.3 练习 300
第七部分 附录 302
附录A 二进制和十六进制 302
A.1 其他进制 302
A.2 不同进制之间的转换 303
A.2.1 二进制 304
A.2.2 为什么使用二进制 304
A.2.3 位、字节和半字节 304
A.2.4 什么是KB 305
A.2.5 二进制数 305
A.3 十六进制 305
附录B 术语表 308
附录C 配套网站 314