第1章 C++基础 1
1.1 C++简介 1
1.1.1 C++语言的起源 1
1.1.2 C++与面向对象的程序设计 1
1.1.3 C++的特点 2
1.1.4 C++术语 2
1.1.5 C++程序示例 2
1.2 变量、表达式及赋值语句 4
1.2.1 标识符 4
1.2.2 变量 5
1.2.3 赋值语句 6
1.2.4 更多赋值语句 8
1.2.5 赋值兼容性 9
1.2.6 字面常量 10
1.2.7 转义序列 11
1.2.8 命名常量 12
1.2.9 算术操作符和表达式 13
1.2.10 整数和浮点数除法 14
1.2.11 类型转换 15
1.2.12 自增和自减操作符 16
1.3 控制台输入/输出 19
1.3.1 使用cout输出 19
1.3.2 输出时换行 20
1.3.3 格式化带小数点的数字 21
1.3.4 用cerr输出 22
1.3.5 用cin输入 22
1.4 程序的风格 23
1.5 库与命名空间 24
1.5.1 库与include命令 24
1.5.2 命名空间 25
第2章 流程控制 30
2.1 布尔表达式 30
2.1.1 创建布尔表达式 30
2.1.2 布尔表达式求值 31
2.1.3 优先级原则 33
2.2 分支机制 37
2.2.1 if-else语句 37
2.2.2 复合语句 38
2.2.3 省略else 40
2.2.4 嵌套语句 40
2.2.5 多分支if-else语句 41
2.2.6 switch语句 42
2.2.7 枚举类型 44
2.2.8 条件操作符 44
2.3 循环 45
2.3.1 while和do-while语句 45
2.3.2 再谈增量、减量操作符 47
2.3.3 逗号操作符 49
2.3.4 for语句 50
2.3.5 break与continue语句 55
2.3.6 嵌套循环 57
第3章 函数基础 63
3.1 预定义函数 63
3.1.1 返回值的预定义函数 63
3.1.2 预定义的void函数 66
3.1.3 随机数生成器 68
3.2 程序员定义的函数 71
3.2.1 定义返回值的函数 71
3.2.2 函数声明的替代形式 73
3.2.3 调用函数的函数 73
3.2.4 返回布尔值的函数 75
3.2.5 定义void函数 76
3.2.6 void函数中的return语句 77
3.2.7 前提条件和执行结果 78
3.2.8 main函数 79
3.2.9 递归函数 79
3.3 作用域规则 80
3.3.1 局部变量 80
3.3.2 过程抽象 82
3.3.3 全局常量与全局变量 83
3.3.4 语句块 84
3.3.5 嵌套作用域 85
3.3.6 for循环中声明的变量 85
第4章 参数与重载 92
4.1 参数 92
4.1.1 传值调用参数 92
4.1.2 引用调用参数初步 94
4.1.3 引用调用机制详解 95
4.1.4 常量引用参数 97
4.1.5 混合参数列表 99
4.2 重载与默认实参 104
4.2.1 重载简介 104
4.2.2 分辨重载的准则 107
4.2.3 默认实参 109
4.3 测试及调试函数 111
4.3.1 assert宏 111
4.3.2 占位程序和驱动程序 112
第5章 数组 119
5.1 数组简介 119
5.1.1 数组的声明和引用 119
5.1.2 内存中的数组 122
5.1.3 数组的初始化 124
5.2 函数中的数组 125
5.2.1 作为函数实参的索引变量 125
5.2.2 整个数组作为函数实参 126
5.2.3 const参数修饰词 129
5.2.4 返回一个数组的函数 130
5.3 用数组编程 134
5.4 多维数组 141
5.4.1 多维数组基础 141
5.4.2 多维数组参数 142
第6章 结构和类 155
6.1 结构 155
6.1.1 结构类型 156
6.1.2 结构作为函数参数 159
6.1.3 结构的初始化 162
6.2 类 163
6.2.1 定义类和成员函数 163
6.2.2 封装 168
6.2.3 公有和私有成员 168
6.2.4 取值和赋值函数 171
6.2.5 结构和类 174
第7章 构造函数及其他工具 179
7.1 构造函数 179
7.1.1 构造函数的定义 179
7.1.2 构造函数的显式调用 183
7.1.3 类类型成员变量 190
7.2 其他工具 193
7.2.1 const参数修饰词 193
7.2.2 内联函数 198
7.2.3 静态成员 199
7.2.4 嵌套类和局部类定义 201
7.3 向量——标准模板库预览 202
7.3.1 向量基础 202
7.3.2 效率问题 205
第8章 操作符重载、友元和引用 210
8.1 基本操作符重载 210
8.1.1 重载基础 210
8.1.2 返回常量类型 215
8.1.3 重载一元操作符 218
8.1.4 作为成员函数的操作符重载 218
8.1.5 重载函数调用符() 220
8.2 友元函数和自动类型转换 221
8.2.1 构造函数的自动类型转换 221
8.2.2 友元函数 222
8.2.3 友元类 225
8.3 引用和其他操作符重载 226
8.3.1 引用 226
8.3.2 重载“<<”和“>>” 228
8.3.3 赋值操作符 234
8.3.4 重载自增和自减操作符 235
8.3.5 重载数组操作符[] 237
8.3.6 基于左值和右值的重载 238
第9章 字符串 243
9.1 数组类型的字符串 243
9.1.1 C字符串值和C字符串变量 243
9.1.2 <cstring>库中的其他函数 247
9.1.3 C字符串的输入和输出 250
9.2 字符操作工具 252
9.2.1 字符输入/输出 252
9.2.2 成员函数get和put 252
9.2.3 成员函数putback、peek和ignore 257
9.2.4 字符操作函数 258
9.3 标准string类 261
9.3.1 标准类string简介 261
9.3.2 string类的输入/输出 263
9.3.3 使用string类进行字符串处理 267
9.3.4 string类对象和C字符串的相互转换 273
第10章 指针和动态数组 280
10.1 指针 280
10.1.1 指针变量 280
10.1.2 内存管理基础 287
10.1.3 动态变量和自动变量 289
10.1.4 指针的应用 292
10.2 动态数组 292
10.2.1 数组变量和指针变量 292
10.2.2 创建和使用动态数组 294
10.2.3 指针运算 298
10.2.4 多维动态数组 299
10.3 类、指针和动态数组 300
10.3.1 ->操作符 301
10.3.2 this指针 301
10.3.3 重载赋值操作符 302
10.3.4 析构函数 309
10.3.5 复制构造函数 310
第11章 分散编译和命名空间 318
11.1 分散编译 318
11.1.1 封装回顾 318
11.1.2 头文件和实现文件 319
11.1.3 使用#ifndef 326
11.2 命名空间 329
11.2.1 命名空间和using命令 329
11.2.2 创建一个命名空间 330
11.2.3 using声明 333
11.2.4 限定名字 334
11.2.5 未命名的命名空间 337
11.2.6 嵌套命名空间 342
第12章 流和文件I/O操作 349
12.1 I/O流 349
12.1.1 文件I/O 350
12.1.2 向文件中添加内容 353
12.1.3 字符I/O 357
12.1.4 文件末尾检查 357
12.2 流I/O的工具 361
12.2.1 文件名作为输入 361
12.2.2 使用流函数对输出格式化 361
12.2.3 操作算子 364
12.2.4 保存设定的标记 365
12.2.5 其他的输出流成员函数 365
12.3 流的层次:继承的简要介绍 370
12.4 随机文件存取 375
第13章 递归 384
13.1 递归void函数 384
13.1.1 一个递归调用的跟踪 386
13.1.2 递归的进一步认识 388
13.1.3 递归调用的栈 391
13.1.4 递归与迭代的比较 392
13.2 有返回值的递归函数 393
13.3 按递归方式思考问题 397
13.3.1 递归设计技术 397
13.3.2 二分查找 398
13.3.3 编码 400
13.3.4 检查递归的正确性 402
13.3.5 效率 402
第14章 继承 410
14.1 继承基础 410
14.1.1 派生类 410
14.1.2 派生类的构造函数 417
14.1.3 protected限定词 420
14.1.4 成员函数的重定义 422
14.1.5 重定义与重载 423
14.1.6 访问重定义函数的基类版本 424
14.1.7 不可继承的函数 425
14.2 使用继承进行编程 426
14.2.1 派生类中的赋值操作符和复制构造函数 426
14.2.2 派生类的析构函数 426
14.2.3 保护继承和私有继承 436
14.2.4 多继承 437
第15章 多态与虚函数 442
15.1 虚函数基础 442
15.1.1 后绑定 442
15.1.2 C++中的虚函数 443
15.1.3 抽象类和纯虚函数 448
15.2 指针和虚函数 451
15.2.1 虚函数和扩展类型兼容性 451
15.2.2 向下转换和向上转换 456
15.2.3 C++如何实现虚函数 457
第16章 模板 461
16.1 函数模板 461
16.2 类模板 471
16.2.1 类模板的语法 471
16.2.2 C++中的模板类vector和basic_string 478
16.3 模板和继承 478
第17章 链式数据结构 487
17.1 节点和链表 487
17.1.1 节点 487
17.1.2 链表 491
17.1.3 向链表头插入一个节点 492
17.1.4 链表中插入或移除节点 495
17.1.5 搜索链表 498
17.2 链表的应用 504
17.3 迭代器 514
17.3.1 指针作为迭代器 514
17.3.2 迭代器类 515
17.4 树 520
第18章 异常处理 535
18.1 异常处理基础 535
18.1.1 异常处理的一个样例 535
18.1.2 自定义异常类 542
18.1.3 多重抛出和捕获 543
18.1.4 在函数中抛出异常 546
18.1.5 异常说明 547
18.2 异常处理的编程技术 549
18.2.1 抛出异常的时机 549
18.2.2 异常类的层次结构 552
18.2.3 测试可用内存 552
18.2.4 再次抛出异常 552
第19章 标准模板库 555
19.1 迭代器 555
19.1.1 迭代器基础 556
19.1.2 迭代器的种类 559
19.1.3 常量迭代器和可变迭代器 562
19.1.4 反向迭代器 563
19.1.5 其他几种迭代器 565
19.2 容器 566
19.2.1 连续容器 566
19.2.2 容器适配器栈和队列 570
19.2.3 关联容器集合和映射 572
19.2.4 效率 575
19.3 泛型算法 576
19.3.1 运行时间和大O记法 576
19.3.2 容器访问运行时间 580
19.3.3 不改变序列的算法 580
19.3.4 改变序列的算法 583
19.3.5 集合算法 584
19.3.6 排序算法 585
第20章 模式和UML 592
20.1 模式 592
20.1.1 适配器模式 592
20.1.2 模型-视图-控制器模式 593
20.1.3 排序模式的效率 598
20.1.4 模式形式体系 599
20.2 UML 600
20.2.1 UML的历史 600
20.2.2 UML的类图表 600
20.2.3 类的相互作用 601
附录1 C++关键字 605
附录2 操作符优先级 606
附录3 ASCII字符集 608
附录4 一些库函数 609
附录5 旧的和新的头文件 614
参考资料 615