第1章 基本介绍 1
1.1简介 2
1.2 C和C++的历史 2
1.3 C++标准类库 3
1.4重要的软件趋势:对象技术 3
1.5典型的C++开发环境 4
1.6关于C++和本书的说明 6
1.7测试驱动的C++程序 7
1.8软件技术 11
1.9 C++的未来:开源Boost类库,TR1和C++0x 12
1.10软件工程案例研究:对象技术和UML介绍 12
1.11小结 15
1.12 Web资源 16
第2章 C++编程入门 18
2.1简介 19
2.2第一个C++程序:输出一行文本 19
2.3修改第一个C++程序 21
2.4另一个C++程序:整数相加 22
2.5算术运算 24
2.6判断:相等运算符和关系运算符 26
2.7(选读)软件工程案例研究:分析ATM需求规范 28
2.8小结 35
第3章 简要介绍类和对象 36
3.1简介 37
3.2类、对象、成员函数和数据成员 37
3.3本章的例子概述 38
3.4定义带成员函数的类 38
3.5定义带参数的成员函数 41
3.6数据成员、set函数和get函数 43
3.7用构造函数初始化对象 48
3.8将类放入单独的文件中,提高复用性 50
3.9分离接口与实现 53
3.10用set函数验证数据 57
3.11(选读)软件工程案例研究:确定ATM需求规范中的类 61
3.12小结 66
第4章 控制语句(1) 67
4.1简介 68
4.2控制结构 68
4.3 if选择语句 70
4.4 if...else双选择语句 71
4.5 while循环语句 74
4.6计数器控制循环 74
4.7标记控制循环 78
4.8嵌套控制语句 82
4.9赋值运算符 84
4.10增量和减量运算符 85
4.11(选读)软件工程案例研究:确定ATM系统的类属性 87
4.12小结 90
第5章 控制语句(2) 91
5.1简介 92
5.2计数器控制循环的实质 92
5.3 for循环语句 93
5.4使用for语句的例子 96
5.5 do...while循环语句 99
5.6 switch多选择语句 101
5.7 break与continue语句 108
5.8逻辑运算符 109
5.9相等运算符(==)与赋值运算符(=) 112
5.10(选读)软件工程案例研究:确定ATM系统中对象的状态和活动 113
5.11小结 117
第6章 函数与递归 118
6.1简介 119
6.2 C++中的程序组件 119
6.3数学类库函数 119
6.4有多个参数的函数定义 120
6.5函数原型与实参强制性 124
6.6 C++标准类库头文件 126
6.7案例研究:随机数生成 127
6.8案例研究:机会游戏,引入枚举 131
6.9存储类 134
6.10作用域规则 136
6.11函数调用栈与活动记录 138
6.12带空参数表的函数 141
6.13内联函数 142
6.14引用与引用参数 143
6.15 默认实参 146
6.16一元作用域分解操作符 148
6.17函数重载 149
6.18函数模板 151
6.19递归 153
6.20使用递归的例子:Fibonacci序列 155
6.21递归与迭代的比较 157
6.22(选读)软件工程案例研究:确定ATM系统的类操作 159
6.23小结 163
第7章 数组与类模板vector 164
7.1简介 165
7.2数组 165
7.3声明数组 166
7.4数组使用举例 167
7.5将数组传入函数 179
7.6案例研究:GradeBook类用数组保存成绩 182
7.7对数组进行线性搜索 187
7.8对数组进行插入排序 188
7.9多维数组 190
7.10案例研究:GradeBook类使用二维数组 192
7.11 C++标准类库的类模板vector介绍 197
7.12(选读)软件工程案例研究:ATM系统中对象间的协作 201
7.13小结 206
第8章 指针与基于指针的字符串 207
8.1简介 208
8.2指针变量的声明与初始化 208
8.3指针运算符 209
8.4利用指针将实参按引用传递给函数 211
8.5使用常量指针 214
8.6使用按引用传递的选择排序 219
8.7 sizeof运算符 221
8.8指针表达式与指针运算 224
8.9指针与数组的关系 225
8.10指针数组 228
8.11案例研究:洗牌与发牌模拟 229
8.12函数指针 232
8.13基于指针的字符串处理介绍 236
8.14小结 244
第9章 类:深入探究(1) 245
9.1简介 246
9.2 Time类案例研究 246
9.3类的作用域与访问类成员 251
9.4分离接口与实现 252
9.5访问函数和工具函数 253
9.6 Time类案例研究:带默认实参的构造函数 255
9.7析构函数 259
9.8何时调用构造函数和析构函数 259
9.9 Time类案例研究:微妙的陷阱——返回私有数据成员的引用 262
9.10默认的逐成员赋值 264
9.11(选读)软件工程案例研究:开始编程ATM系统的类 266
9.12小结 271
第10章 类:深入探究(2) 272
10.1简介 273
10.2常量对象与常量成员函数 273
10.3合成:作为类成员的对象 280
10.4友元函数与友元类 285
10.5使用this指针 288
10.6用new和delete操作符实现动态内存管理 292
10.7静态类成员 293
10.8数据抽象与信息隐藏 298
10.9容器类与迭代器 300
10.10代理类 300
10.11小结 302
第11章 运算符重载:字符串与数组对象 304
11.1简介 305
11.2运算符重载基础 305
11.3运算符重载的限制 306
11.4作为类成员的运算符函数与全局函数的比较 307
11.5重载流插入与流提取运算符 308
11.6重载一元运算符 311
11.7重载二元运算符 311
11.8案例研究:Array类 312
11.9类型之间的转换 321
11.10案例研究:String类 322
11.11重载++和-- 331
11.12案例研究:Date类 332
11.13标准类库的string类 335
11.14用explicit声明构造函数 338
11.15 小结 341
第12章 面向对象编程:继承 342
12.1简介 343
12.2基类与派生类 343
12.3保护成员 345
12.4基类与派生类的关系 345
12.5派生类中的构造函数和析构函数 368
12.6公有、保护和私有继承 374
12.7继承与软件工程 374
12.8小结 376
第13章 面向对象编程:多态 377
13.1简介 378
13.2多态举例 378
13.3继承层次中对象间的关系 379
13.4类型字段与switch语句 392
13.5抽象类与纯虚函数 393
13.6案例研究:使用多态的工资系统 394
13.7(选读)多态、虚函数和动态绑定的“内幕” 406
13.8案例研究:利用多态以及使用向下强制转换、dynarnic_cast、typeid和type_info运行时类型信息的工资系统 409
13.9虚析构函数 412
13.10(选读)软件工程案例研究:在ATM系统中加入继承 412
13.11小结 418
第14章 模板 419
14.1简介 420
14.2函数模板 420
14.3重载函数模板 422
14.4类模板 423
14.5类模板的非类型参数和默认类型 428
14.6模板与继承 428
14.7模板与友元 429
14.8模板与静态成员 429
14.9小结 430
第15章 流输入/输出 431
15.1简介 432
15.2流 432
15.3流输出 435
15.4流输入 436
15.5使用read、write和gcount的非格式化1/O 439
15.6流操作子简介 440
15.7流格式状态与流操作子 444
15.8流的错误状态 451
15.9将输出流与输入流连接 452
15.10小结 453
第16章 异常处理 454
16.1简介 455
16.2异常处理概述 455
16.3例子:处理除零错误 456
16.4何时使用异常处理 460
16.5重抛异常 461
16.6异常规范 462
16.7处理意外的异常 462
16.8堆栈解退 463
16.9构造函数、析构函数与异常处理 464
16.10异常与继承 465
16.11处理new失败 465
16.12 auto_ptr类与动态内存分配 468
16.13标准类库中的异常层次 470
16.14其他的错误处理技术 471
16.15 小结 472
第17章 文件处理 473
17.1简介 474
17.2数据层次 474
17.3文件和流 475
17.4创建顺序文件 476
17.5从顺序文件读取数据 479
17.6更新顺序文件 483
17.7随机访问文件 484
17.8创建随机访问文本文件 484
17.9向随机访问文件写随机数据 488
17.10从随机访问文件顺序读取 490
17.11案例研究:交易处理程序 491
17.12对象序列化概述 496
17.13小结 497
第18章 string类与字符串流处理 498
18.1简介 499
18.2字符串的赋值与拼接 500
18.3字符串比较 501
18.4子串 503
18.5字符串交换 504
18.6字符串的特性 504
18.7搜索字符串中的子串和字符 506
18.8替换字符串中的字符 508
18.9将字符插入到字符串中 509
18.10转换成C风格的char*字符串 510
18.11迭代器 511
18.12处理字符串流 512
18.13小结 514
第19章 位、字符、C字符串和结构 515
19.1简介 516
19.2结构定义 516
19.3初始化结构 517
19.4将结构用于函数 518
19.5 typedef定义 518
19.6例子:高性能的洗牌与发牌模拟 518
19.7位运算符 521
19.8位段 527
19.9字符处理类库 530
19.10基于指针的字符串转换函数 534
19.11基于指针的字符串处理类库中的搜索函数 537
19.12基于指针的字符串处理类库中的内存函数 541
19.13小结 544
第20章 标准模板类库(STL) 545
20.1标准模板类库(STL)介绍 546
20.2序列容器 554
20.3关联容器 564
20.4容器适配器 570
20.5算法 574
20.6 bitset类 597
20.7函数对象 600
20.8小结 602
20.9 STL Web资源 602
第21章 Boost类库、Technical Report 1和C++Ox 603
21.1简介 604
21.2 Deitel在线C++以及相关的资源中心 604
21.3 Boost类库 604
21.4向Boost添加新类库 604
21.5安装Boost类库 605
21.6 Technical Report 1(TR1)中的Boost类库 605
21.7正则表达式与Boost.Regex类库 607
21.8智能指针与Boost.Smart_ptr 613
21.9 Technical Report 1 621
21.10 C++0x 622
21.11核心的语言变化 622
21.12小结 626
第22章 其他主题 627
22.1简介 628
22.2 const cast运算符 628
22.3名字空间 629
22.4运算符关键字 632
22.5 mutable类成员 634
22.6类成员的指针(.*和->*) 635
22.7多重继承 636
22.8多重继承与虚拟基类 640
22.9小结 644
附录A 运算符的优先级和结合性 645
附录B ASCII字符集 647
附录C 基础类型 648
附录D 预处理器 649
附录E ATM案例研究代码 655
附录F UML 2的其他框图类型 678
附录G 使用Visual Studio调试器 679
附录H 使用GNU C++调试器 689
参考文献 701
索引 706