第1章 计算机与C++编程简介 1
1.1 简介 1
1.2 什么是计算机 3
1.3 计算机组成 3
1.4 操作系统的变革 4
1.5 个人计算、分布式计算与客户/服务器计算 4
1.6 机器语言、汇编语言和高级语言 5
1.7 C语言与C++的历史 6
1.8 C++标准库 7
1.9 Java、Internet与万维网 7
1.10 其他高级语言 8
1.11 结构化编程 8
1.12 典型C++环境基础 8
1.13 C++与本书的一般说明 10
1.14 C++编程简介 11
1.15 简单程序:打印一行文本 12
1.16 简单程序:两个整数相加 15
1.17 内存的概念 18
1.18 算术运算 19
1.19 判断:相等与关系运算符 21
1.20 新型头文件与名字空间 24
1.21 有关对象的思考 25
小结 27
术语 29
自测练习 31
自测练习答案 33
练习 34
第2章 控制结构 38
2.1 简介 38
2.2 算法 38
2.3 伪代码 39
2.4 控制结构 39
2.5 if选择结构 41
2.6 if/else选择结构 42
2.7 while重复结构 45
2.8 构造算法:实例研究1(计数器控制重复) 47
2.9 构造算法与自上而下逐步完善:实例研究2(标记控制重复) 48
2.10 构造算法与自上而下逐步完善:实例研究3(嵌套控制结构) 54
2.11 赋值运算符 57
2.12 自增和自减运算符 58
2.13 计数器控制循环的要点 60
2.14 for重复结构 62
2.15 for结构使用举例 65
2.16 switch多项选择结构 68
2.17 do/while重复结构 74
2.18 break和continue语句 75
2.19 逻辑运算符 77
2.20 混淆相等(==)与赋值(=)运算符 79
2.21 结构化编程小结 80
2.22 有关对象的思考:确定问题中的对象 84
小结 85
术语 86
自测练习 87
自测练习答案 89
练习 92
第3章 函数 102
3.1 简介 102
3.2 C++程序组件 102
3.3 数学函数库 103
3.4 函数 104
3.5 函数定义 105
3.6 函数原型 108
3.7 头文件 110
3.8 随机数产生器 111
3.9 案例:机会游戏与enum简介 115
3.10 存储类 118
3.11 作用域规则 120
3.12 递归 123
3.13 使用递归举例:Fibonacci数列 125
3.14 递归与迭代 128
3.15 带空参数表的函数 129
3.16 内联函数 130
3.17 引用与引用参数 131
3.18 默认参数 135
3.19 一元作用域运算符 136
3.20 函数重载 137
3.21 函数模板 138
3.22 有关对象的思考:确定对象属性 140
小结 142
术语 145
自测练习 146
自测练习答案 149
练习 151
第4章 数组 160
4.1 简介 160
4.2 数组 160
4.3 声明数组 162
4.4 使用数组的举例 162
4.5 将数组传递给函数 174
4.6 排序数组 177
4.7 实例研究:用数组计算平均值、中数和模 179
4.8 查找数组:线性查找与折半查找 182
4.9 多下标数组 186
4.10 有关对象的思考:确定类的行为 191
小结 192
术语 193
自测练习 194
自测练习答案 195
练习 196
递归练习 204
第5章 指针与字符串 206
5.1 简介 206
5.2 指针变量的声明与初始化 206
5.3 指针运算符 207
5.4 按引用调用函数 210
5.5 指针与常量限定符 213
5.6 按引用调用的冒泡排序 218
5.7 指针表达式与指针算法 222
5.8 指针与数组的关系 224
5.9 指针数组 228
5.10 实例研究:洗牌与发牌 228
5.11 函数指针 232
5.12 字符与字符串处理简介 236
5.12.1 字符与字符串基础 236
5.12.2 字符串处理库的字符串操作函数 238
5.13 有关对象的思考:对象间的交互 244
小结 245
术语 247
自测练习 248
自测练习答案 250
练习 251
特殊小节:建立自己的计算机 254
更多的指针练习 258
字符串操作练习 262
特殊小节:高级字符串操作练习 263
复杂字符串操作练习 266
第6章 类与数据抽象(一) 267
6.1 简介 267
6.2 结构定义 268
6.3 访问结构成员 268
6.4 用struct实现用户自定义类型Time 269
6.5 用类实现Time抽象数据类型 271
6.6 类范围与访问类成员 276
6.7 接口与实现方法的分离 277
6.8 控制对成员的访问 280
6.9 访问函数与工具函数 282
6.10 初始化类对象:构造函数 284
6.11 在构造函数中使用默认参数 285
6.12 使用析构函数 288
6.13 何时调用构造函数与析构函数 288
6.14 使用数据成员和成员函数 291
6.15 微妙的陷阱:返回对private数据成员的引用 295
6.16 通过默认的成员复制进行赋值 297
6.17 软件复用性 298
6.18 有关对象的思考:编写电梯模拟程序的类 298
小结 299
术语 300
自测练习 301
自测练习答案 302
练习 302
第7章 类与数据抽象(二) 305
7.1 简介 305
7.2 const(常量)对象与const成员函数 305
7.3 复合:把对象作为类成员 312
7.4 友元函数与友元类 316
7.5 使用this指针 319
7.6 动态内存分配与new和delete运算符 323
7.7 static类成员 324
7.8 数据抽象与信息隐藏 328
7.8.1 范例:数组抽象数据类型 329
7.8.2 范例:字符串抽象数据类型 330
7.8.3 范例:队列抽象数据类型 330
7.9 容器类与迭代 330
7.10 代理类 331
7.11 有关对象的思考:在电梯模拟程序中使用复合和动态对象管理 332
小结 333
术语 334
自测练习 335
自测练习答案 335
练习 336
第8章 运算符重载 338
8.1 简介 338
8.2 运算符重载的基础 338
8.3 运算符重载的限制 340
8.4 用作类成员与友元函数的运算符函数 341
8.5 重载流插入与流读取运算符 342
8.6 重载一元运算符 344
8.7 重载二元运算符 345
8.8 实例研究:Array类 345
8.9 类型之间的转换 356
8.10 实例研究:String类 356
8.11 重载++与-- 366
8.12 实例研究:Date类 367
小结 371
术语 373
自测练习 374
自测练习答案 374
练习 374
第9章 继承 381
9.1 简介 381
9.2 继承:基类和派生类 382
9.3 protected成员 384
9.4 把基类指针强制转换为派生类指针 384
9.5 使用成员函数 388
9.6 在派生类中重定义基类成员 389
9.7 public、protected和private继承 392
9.8 直接基类和间接基类 393
9.9 在派生类中使用构造函数和析构函数 393
9.10 将派生类对象隐式转换为基类对象 396
9.11 关于继承的软件工程 397
9.12 复合与继承的比较 398
9.13 对象的“使用”关系和“知道”关系 398
9.14 实例研究:类Point、Circle和Cylinder 398
9.15 多重继承 404
小结 408
术语 410
自测练习 410
自测练习答案 411
练习 411
第10章 虚函数和多态性 412
10.1 简介 412
10.2 类型域和switch语句 412
10.3 虚函数 412
10.4 抽象基类和具体类 413
10.5 多态性 414
10.6 实例研究:利用多态性的工资单系统 415
10.7 新类和动态关联 424
10.8 虚析构函数 424
10.9 实例研究:继承接口和实现 425
10.10 多态、虚函数和动态关联 431
小结 434
术语 435
自测练习 435
自测练习答案 436
练习 436
第11章 C++输入/输出流 437
11.1 简介 437
11.2 流 438
11.2.1 iostream类库的头文件 438
11.2.2 输入/输出流类和对象 438
11.3 输出流 439
11.3.1 流插入运算符 440
11.3.2 连续使用流插入/流读取运算符 441
11.3.3 输出char*类型的变量 442
11.3.4 用成员函数put输出字符和put函数的连续调用 443
11.4 输入流 443
11.4.1 流读取运算符 443
11.4.2 成员函数get和getline 445
11.4.3 istream类中的其他成员函数(peek、putback和ignore) 447
11.4.4 类型安全的I/O 448
11.5 成员函数read、gcount和write的无格式输入/输出 448
11.6 流操纵算子 449
11.6.1 整数流的基数:流操纵算子dec、oct、hex和setbase 449
11.6.2 设置浮点数精度(precision、setprecision) 450
11.6.3 设置域宽(setw、width) 451
11.6.4 用户自定义的流操纵算子 452
11.7 流格式状态 453
11.7.1 格式状态标志 453
11.7.2 尾数零和十进制小数点(ios∷showpoint) 454
11.7.3 对齐(ios∷left、ios∷right、ios∷internal) 454
11.7.4 设置填充字符(fill、setfill) 456
11.7.5 整数流的基数:(ios∷dec、ios∷oct、ios∷hex、ios∷showbase) 457
11.7.6 浮点数和科学记数法(ios∷scientific、ios∷fixed) 457
11.7.7 大/小写控制(ios∷uppercase) 458
11.7.8 设置及清除格式标志(flags、setiosflags、resetiosflags) 459
11.8 流错误状态 460
11.9 把输出流连到输入流上 462
小结 462
术语 465
自测练习 467
自测练习答案 469
练习 471
第12章 模板 474
12.1 简介 474
12.2 函数模板 474
12.3 重载模板函数 477
12.4 类模板 477
12.5 类模板与非类型参数 482
12.6 模板与继承 483
12.7 模板与友元 483
12.8 模板与static成员 484
小结 484
术语 485
自测练习 486
自测练习答案 486
练习 487
第13章 异常处理 489
13.1 简介 489
13.2 何时使用异常处理 491
13.3 其他错误处理方法 491
13.4 C++异常处理基础:try、throw、catch 492
13.5 简单异常处理例子:除数为0 492
13.6 抛出异常 494
13.7 捕获异常 495
13.8 再抛出异常 497
13.9 异常指定 499
13.10 处理意外异常 499
13.11 堆栈解退 500
13.12 构造函数、析构函数与异常处理 501
13.13 异常与继承 501
13.14 处理new故障 501
13.15 auto_ptr类与动态内存分配 505
13.16 标准库异常层次 506
小结 507
术语 509
自测练习 510
自测练习答案 511
练习 511
第14章 文件处理 513
14.1 简介 513
14.2 数据的层次 513
14.3 文件和流 515
14.4 建立顺序访问文件 515
14.5 读取顺序访问文件中的数据 519
14.6 更新顺序访问文件 524
14.7 随机访问文件 524
14.8 建立随机访问文件 525
14.9 向随机访问文件中随机地写入数据 527
14.10 从随机访问文件中顺序地读取数据 528
14.11 实例研究:事务处理程序 530
14.12 对象的输入/输出 535
小结 535
术语 536
自测练习 537
自测练习答案 538
练习 539
第15章 数据结构 543
15.1 简介 543
15.2 自引用类 544
15.3 动态内存分配 544
15.4 链表 545
15.5 堆栈 556
15.6 队列 560
15.7 树 562
小结 568
术语 569
自测练习 570
自测练习答案 571
练习 572
特殊小节:建立自己的编译器 577
第16章 位、字符、字符串和结构 589
16.1 简介 589
16.2 结构的定义 589
16.3 结构的初始化 591
16.4 函数和结构 591
16.5 类型定义:typedef 592
16.6 范例:高效的洗牌和发牌模拟程序 592
16.7 位运算符 594
16.8 位段 601
16.9 字符处理库 603
16.10 字符串转换函数 608
16.11 字符串处理库中的查找函数 612
16.12 字符串处理库中的内存函数 616
16.13 字符串处理库中的其他函数 619
小结 620
术语 622
自测练习 623
自测练习答案 624
练习 625
第17章 预处理器 630
17.1 简介 630
17.2 预处理指令#include 630
17.3 预处理指令#define:符号常量 631
17.4 预处理指令#define:宏 631
17.5 条件编译 633
17.6 预处理指令#error和#pragma 634
17.7 运算符#和## 634
17.8 行号 635
17.9 预定义的符号常量 635
17.10 断言(宏assert) 635
小结 636
术语 637
自测练习 637
自测练习答案 638
练习 639
第18章 C语言遗留代码问题 640
18.1 简介 640
18.2 UNIX和DOS系统中的输入/输出重定向 640
18.3 变长参数表 641
18.4 使用命令行参数 643
18.5 对编译多个源文件程序的说明 644
18.6 用exit和atexit终止程序的执行 645
18.7 volatile类型限定符 646
18.8 整数和浮点数常量的后缀 647
18.9 信号处理 647
18.10 动态内存分配:函数calloc和realloc 649
18.11 无条件转移:goto语句 650
18.12 联合体 651
18.13 连接指定 653
小结 654
术语 656
自测练习 657
自测练习答案 657
练习 657
第19章 string类与字符串流处理 659
19.1 简介 659
19.2 string的赋值与连接 660
19.3 比较string 662
19.4 子串 665
19.5 交换string 665
19.6 string的特性 666
19.7 寻找string中的字符 668
19.8 替换string中的字符 670
19.9 在string中插入字符 671
19.10 转换成C语言式char*字符串 673
19.11 迭代器 674
19.12 字符串流处理 675
小结 678
术语 679
自测练习 680
自测练习答案 681
练习 681
第20章 标准模板库(STL) 684
20.1 标准模板库(STL)简介 684
20.1.1 容器简介 685
20.1.2 迭代器简介 688
20.1.3 算法简介 692
20.2 顺序容器 693
20.2.1 vector顺序容器 694
20.2.2 list顺序容器 700
20.2.3 deque顺序容器 703
20.3 关联容器 705
20.3.1 multiset关联容器 705
20.3.2 set关联容器 708
20.3.3 multimap关联容器 709
20.3.4 map关联容器 711
20.4 容器适配器 713
20.4.1 stack适配器 713
20.4.2 queue适配器 715
20.4.3 priority_queue适配器 716
20.5 算法 717
20.5.1 fill、fill_n、generate与generate_n 717
20.5.2 equal、mismatch和lexicographical_compare 719
20.5.3 remove、remove_if、remove_copy和remove_copy_if 721
20.5.4 replace、replace_if、replace_copy和replace_copy_if 724
20.5.5 数学算法 726
20.5.6 基本查找与排序算法 730
20.5.7 swap、iter_swap和swap_ranges 732
20.5.8 copy_backward、merge、unique和reverse 733
20.5.9 inplace_merge、unique_copy和reverse_copy 736
20.5.10 集合操作 737
20.5.11 lower_bound、upper_bound和equal_range 740
20.5.12 堆排序 742
20.5.13 min和max 744
20.5.14 本章未介绍的算法 745
20.6 bitset类 746
20.7 函数对象 749
小结 752
术语 755
自测练习 757
自测练习答案 757
练习 758
Internet和World Wide Web中的STL资源 758
STL文献 761
第21章 ANSI/ISO C++标准语言补充 763
21.1 简介 763
21.2 bool数据类型 763
21.3 static_cast运算符 765
21.4 const_cast运算符 766
21.5 reinterpret_cast运算符 768
21.6 名字空间 769
21.7 运行时类型信息(RTTI) 772
21.8 运算符关键字 776
21.9 explicit构造函数 777
21.10 mutable类成员 781
21.11 类成员指针(.*和->*) 783
21.12 多重继承与virtual基类 785
21.13 结束语 788
小结 788
术语 789
自测练习 790
自测练习答案 790
练习 790
附录A 运算符的优先级与结合律 793
附录B ASCII字符集 795
附录C 数值系统 796
附录D 有关C++的Internet与Web资源 806
参考文献 811