第1章 计算机和C++编程概述 1
1.1 简介 1
1.2 计算机是什么 3
1.3 计算机的构成 3
1.4 操作系统的进化 4
1.5 个人计算、分布式计算和客户机/服务器计算 5
1.6 机器语言、汇编语言和高级语言 5
1.7 C和C++发展简史 7
1.9 Java和《Java程序设计》 8
1.8 C++标准库 8
1.10 其他高级语言 9
1.11 结构化编程 9
1.12 关键的软件趋势:对象技术 10
1.13 典型C++环境的基础 12
1.14 硬件发展趋势 14
1.15 因特网发展简史 14
1.16 万维网发展简史 16
1.17 C++和本书的常规注意事项 16
1.18 C++编程简述 17
1.19 一个简单的程序:打印一行文字 17
1.20 另一个简单的程序:两个整数相加 21
1.21 内存的概念 24
1.22 算术运算 25
1.23 判断:相等性和关系操作符 28
1.24 对象思想:对象技术及UML简介 32
1.25 小结 36
第2章 控制结构 52
2.1 简介 52
2.2 算法 52
2.4 控制结构 53
2.3 伪代码 53
2.5 if选择结构 56
2.6 if/else选择结构 57
2.7 while重复结构 61
2.8 算法设计:案例分析1(计数器控制重复) 62
2.9 算法设计:案例分析2(标记控制重复) 65
2.10 算法设计:案例分析3(嵌套控制结构) 71
2.11 赋值操作符 75
2.12 自增和自减操作符 76
2.13 计数器控制重复的本质 79
2.14 for重复结构 80
2.15 for结构用法示例 84
2.16 switch多选结构 88
2.17 do/while重复结构 93
2.18 break和continue语句 95
2.19 逻辑操作符 96
2.20 混淆相等性操作符(==)和赋值操作符(=) 99
2.21 结构化编程小结 100
2.22 [可选案例分折]对象思想:标识问题所牵涉的类 105
2.23 小结 116
3.2 C++中的程序组件 142
3.1 简介 142
第3章 函数 142
3.3 数学库函数 143
3.4 函数 144
3.5 函数定义 145
3.6 函数原型 148
3.7 头文件 150
3.8 生成随机数 151
3.9 示例:博彩游戏和enum简介 156
3.10 存储类 159
3.11 作用域规则 161
3.12 递归 164
3.13 递归应用示例:费波拉奇数列 167
3.14 递归和迭代的对比 170
3.15 使用空参数列表的函数 172
3.16 内联函数 173
3.17 引用和引用参数 174
3.18 默认实参 178
3.19 一元作用域分辨符 179
3.20 函数重载 180
3.21 函数模板 182
3.22 [可选案例分析]对象思想:标识类的属性 184
3.23 小结 189
第4章 数组 215
4.1 简介 215
4.2 数组 215
4.3 声明数组 217
4.4 数组用法示例 217
4.5 将数组传给函数 231
4.6 数组排序 235
4.7 案例分析:利用数组计算均数、中位数和众数 239
4.8 搜索数组:线性搜索和二元搜索 241
4.9 多下标数组 246
4.10 [可选案例分析]对象思想:标识类的行为 252
4.11 小结 258
第5章 指针和字符串 276
5.1 简介 276
5.2 指针变量声明和初始比 276
5.3 指针操作符 277
5.4 按引用调用函数 280
5.5 使用带指针的const限定符 283
5.6 使用引用调用的冒泡排序 289
5.7 指针表达式和指针算法 294
5.3 指针和数组的关系 296
5.9 指针数组 299
5.10 案例分析:洗牌和发牌模拟程序 300
5.11 函数指针 304
5.12 字符和字符串处理概述 309
5.13 [可选案例分析]对象思想:对象间的合作 317
5.14 小结 322
第6章 类和数据抽象(一) 349
6.1 简介 349
6.3 访问结构成员 350
6.2 结构定义 350
6.4 用struct实现用户自定义类型Time 351
6.5 用class实现Time抽象数据类型 353
6.6 类作用域和访问类成员 358
6.7 接口同实现方法的分离 360
6.3 控制对成员的访问 363
6.9 访问函数和工具函数 366
6.10 初始化类对象:构造函数 369
6.11 在构造函数中使用默认参数 369
6.13 何时调用构造函数和析构函数 373
6.12 使用析构函数 373
6.14 使用数据成员和成员函数 376
6.15 微妙的陷阱:返回对Private数据成员的引用 380
6.16 通过默认的按位成员复制赋值 383
6.17 软件重用性 384
6.18 [可选案例分析]对象思想:编写电梯模拟程序所需的类 385
6.19 小结 395
第7章 类和数据抽象(二) 405
7.1 简介 405
7.2 常量对象和常量成员函数 405
7.3 合成:对象作为类成员 412
7.4 友元函数和友元类 418
7.5 使用this指针 421
7.6 用new和delete实现动态内存分配 425
7.7 静态类成员 426
7.8 数据抽象和信息隐藏 431
7.9 容器类和迭代器 434
7.10 代理类 434
7.11 [可选案例分析]:对象思想:为电梯模拟程序中的类编写程序 436
7.12 小结 462
8.2 操作符重载的基础知识 469
8.1 简介 469
第8章 操作符重载 469
8.3 操作符重载的限制条件 470
8.4 类成员操作符函数与友元函数操作符函数的对比 472
8.5 重载流插入与流读取操作符 473
8.6 重载一元操作符 475
8.7 重载二元操作符 476
8.8 案例分析:Array类 477
8.9 类型转换 488
8.10 案例分析:String类 489
8.11 重载++和-- 499
8.12 案例分析:Date类 500
8.13 小结 505
第9章 继承 517
9.1 简介 517
9.2 继承:基类与派生类 518
9.3 protected成员 520
9.4 基类指针向派生类指针的强制类型转换 520
9.5 使用成员函数 525
9.6 在派生类中改写基类成员 526
9.7 public、Protected和Private继承 529
9.9 在派生类中使用构造和析构函数 530
9.8 直接基类和间接基类 530
9.10 派生类向基类的隐式转换 534
9.11 继承在软件工程中的应用 534
9.12 合成与继承 536
9.13 "使用"关系和"知道"关系 536
9.14 案例分析:Point,Circle和Cylinder类 536
9.15 多重继承 544
9.16 [可选案例分析]对象思想:在电梯模拟程序中集成继承 548
9.17 小结 554
10.2 类型域和switch语句 560
10.3 虚拟函数 560
10.1 简介 560
第10章 虚拟函数和多态性 560
10.4 抽象基类和具体类 561
10.5 多态性 562
10.6 案例分析:使用多态性的工资发放系统 564
10.7 新类和动态绑定 574
10.8 虚拟析构函数 574
10.9 案例分析:继承接口和实现 574
10.10 多态性、虚拟函数和动态绑定的本质 582
10.11 小结 585
第11章 C++输入/输出流 589
11.1 简介 589
11.2 流 589
11.3 输出流 592
11.4 输入流 595
11.5 成员函数read,gcount和write的无格式输入/输出 601
11.6 流操纵元 602
11.7 流格式状态 607
11.8 流错误状态 616
11.10 小结 618
11.9 把输出流连接到输入流 618
第12章 模板 630
12.1 简介 630
12.2 函数模板 630
12.3 重载模板函数 633
12.4 类模板 634
12.5 类模板与无类型参数 639
12.6 模板与继承 639
12.7 模板与友元 640
12.9 小结 641
12.8 模板与静态数据成员 641
第13章 异常处理 646
13.1 简介 646
13.2 何时使用异常处理 648
13.3 其他错误处理方法 648
13.4 C++异常处理基础:try.throw和catch 649
13.5 简单的异常处理例子:除数为0 649
13.6 抛出异常 649
13.7 捕捉异常 651
13.8 重抛出异常 655
13.9 异常的规约 656
13.11 堆栈解退 657
13.10 处理意外异常 657
13.12 构造函数、析构函数与异常处理 658
13.13 异常与继承 659
13.14 处理new失败 659
13.15 auto_ptr类与动态内存分配 663
13.16 标准库异常的层次结构 665
13.17 小结 665
第14章 文件处理 674
14.1 简介 674
14.2 数据的层次结构 674
14.3 文件和流 676
14.4 创建顺序访问文件 677
14.5 读取顺序访问文件中的数据 680
14.6 更新顺序访问文件 686
14.7 随机访问文件 686
14.8 建立随机访问文件 687
14.9 向随机访问文件随机写入数据 689
14.10 从随机访问文件中顺序读取数据 691
14.11 案例分析:事务处理程序 693
14.12 对象的输入/输出 699
14.13 小结 699
15.1 简介 707
第15章 数据结构 707
15.3 动态内存分配 708
15.2 自引用类 708
15.4 链表 709
15.5 堆栈 721
15.6 队列 725
15.7 树 728
15.8 小结 735
16.1 简介 757
16.2 结构的定义 757
第16章 位、字符、字符串与结构 757
16.3 结构的初始化 759
16.4 在函数中使用结构 759
16.5 关键字typedef 759
16.6 示例:高性能洗牌与发牌模拟程序 760
16.7 位操作符 762
16.8 位段 770
16.9 字符处理函数库 773
16.10 字符串转换函数 779
16.11 字符串处理函数库的查找函数 783
16.12 字符串处理函数库中的内存处理函数 788
16.13 字符串处理函数库中的其他函数 791
16.14 小结 792
第17章 预处理程序 805
17.1 简介 805
17.2 预处理程序指令*include 805
17.3 预处理程序指令*define:符号常量 806
17.4 预处理程序指令*define:宏指令 806
17.5 条件编译 808
17.6 预处理程序指令*error与*Pragma 808
17.9 预定义符号常量 809
17.8 行号 809
17.7 操作符*与 809
17.10 宏指令(assert) 810
17.11 小结 810
第18章 C遗留代码 815
18.1 简介 815
18.2 UNIX与DOS系统中的重定向输入/输出 815
18.3 变长参数列表 816
18.4 使用命令行参数 818
18.5 编译多个源文件程序的相关说明 819
18.6 用函数exit与atexit终止程序运行 821
18.8 整数和浮点数常量的后缀 822
18.7 类型限定符volatile 822
18.9 信号处理 823
18.10 用calloc与realloc动态内存分配 825
18.11 无条件转向语句:goto 825
18.12 联合体 826
18.13 接合规约 829
18.14 小结 830
第19章 string类和字符串流处理 837
19.1 简介 837
19.2 字符串的赋值与拼接 838
19.3 比较字符串 840
19.4 子串 843
19.5 交换字符串 843
19.6 字符串的特性 844
19.7 查找字符串中的字符 846
19.8 替换字符串中的字符 848
19.9 在字符串中插入字符 850
19.10 转换为C风格的char*字符串 851
19.11 迭代器 853
19.12 字符串流处理 854
19.13 小结 858
20.1 标准模板库STL简介 864
第20章 标准模板库(STL) 864
20.2 序列容器 874
20.3 关联容器 886
20.4 容器适配器 894
20.5 算法 899
20.6 bitset类 930
20.7 函数对象 933
20.8 小结 936
第21章 标准C++语言的增补 947
21.1 简介 947
21.2 布尔数据类型 947
21.3 static_cast操作符 949
21.4 const_cast操作符 951
21.5 reinterpret_cast操作符 952
21.6 名称空间 953
21.7 运行时类型信息(RTTI) 956
21.8 操作符关键字 960
21.9 显式构造函数 962
21.10 mutable类成员 967
21.11 类成员指针(*和->*) 968
21.12 多重继承和虚拟基类 970
21.14 小结 974
21.13 结束语 974
附录A 操作符的优先级和结合性 980
附录B ASCII字符集 982
附录C 数值系统 983
C.1 简介 983
C.2 将二进制数简化为八进制和十六进制数 985
C.3 将八进制和十六进制数转换为二进制数 986
C.4 将二进制、八进制或十六进制转换为十进制 987
C.5 将十进制转换为二进制、八进制或十六进制 987
C.6 负的二进制数:2的补值记号法 989
C.7 小结 990
附录D 因特网和万维网上的C++资源 994
D.1 资源 994
D.2 教程 995
D.3 FAQ 995
D.4 Visual C++ 996
D.5 comp. lang. C++ 996
D.6 编译工具 998
D.7 开发工具 999
D.8 标准模板库 999