第1章 计算机和C++编程入门 1
概述 2
1.1计算机系统 2
硬件 2
软件 5
高级语言 6
编译器 7
1.2编程和问题求解 9
算法 9
程序设计 10
面向对象编程 12
软件生命周期 12
1.3 C++入门 13
C++语言的起源 13
一个C++示范程序 14
简单C++程序的布局 17
编译和运行C++程序 19
1.4测试和调试 21
程序错误的分类 22
小结 24
自测题答案 24
编程练习 25
编程项目 26
第2章 C++基础知识 29
概述 30
预备知识 30
2.1变量和赋值 30
变量 30
名称:标识符 32
变量声明 33
赋值语句 34
2.2输入和输出 37
使用cout进行输出 37
include预编译指令和命名空间 38
转义序列 39
格式化带小数点的数字 41
用cin进行输入 42
设计输入和输出 43
2.3数据类型和表达式 44
int类型和double类型 44
其他数值类型 45
C++11类型 46
char类型 47
bool类型 48
string类简介 48
类型的兼容性 49
算术操作符和表达式 51
更多赋值语句 54
2.4简单控制流程 54
一个简单的分支机制 54
复合语句 59
简单的循环机制 61
递增操作符和递减操作符 63
2.5程序风格 66
缩进 67
注释 67
为常量命名 68
小结 71
自测题答案 71
编程练习 74
编程项目 76
第3章 更多的控制流程 79
概述 80
预备知识 80
3.1使用布尔表达式 80
布尔表达式求值 80
枚举类型(选读) 85
3.2多路分支 86
嵌套语句 86
多路if-else语句 88
switch语句 92
为菜单使用switch语句 95
语句块 96
3.3 C++循环语句详解 99
while语句回顾 99
再论递增操作符和递减操作符 100
for语句 102
应该使用哪种循环 106
break语句 108
3.4设计循环 109
求和与求乘积的循环 109
终止循环 111
嵌套循环 113
调试循环 114
小结 117
自测题答案 117
编程练习 121
编程项目 122
第4章 过程抽象和返回值的函数 125
概述 126
预备知识 126
4.1自顶向下设计 126
4.2预定义函数 126
使用预定义函数 127
随机数生成 130
强制类型转换 131
强制类型转换的古老形式 133
4.3程序员自定义函数 134
函数定义 134
返回布尔值的函数 138
另一种形式的函数声明 138
函数定义语法小结 140
再论函数定义的位置 140
4.4过程抽象 142
黑盒的比喻 142
4.5作用域和局部变量 151
函数如同小程序 151
全局常量和全局变量 153
传值形参是局部变量 155
块作用域 156
再论命名空间 157
4.6重载函数名称 160
重载入门 160
自动类型转换 164
小结 166
自测题答案 166
编程练习 169
编程项目 170
第5章 所有子任务的函数 173
概述 174
预备知识 174
5.1 void函数 174
void函数的定义 174
void函数中的return语句 177
5.2传引用参数 178
初探传引用调用 179
传引用调用详解 180
混合的参数列表 185
5.3使用过程抽象 188
在函数中调用其他函数 188
前条件和后条件 189
5.4测试和调试函数 194
存根和驱动程序 194
5.5常规调试技术 197
兼容并蓄,不抱偏见 198
检查常见错误 198
定位错误 198
assert宏 200
小结 202
自测题答案 202
编程练习 205
编程项目 206
第6章 I/O流:对象和类入门 209
概述 210
预备知识 210
6.1流和基本文件I/O 210
文件之于I/O的重要性 211
文件I/O 211
类与对象入门 214
文件I/O技术 218
追加到文件(选读) 220
文件名作为输入(选读) 221
6.2流I/O工具 224
用流函数格式化输出 224
操纵元 227
流作为函数实参 228
命名空间的问题 231
6.3字符I/O 233
成员函数get和put 233
putback成员函数(选读) 236
函数的默认实参(选读) 240
eof成员函数 243
预定义字符函数 246
小结 249
自测题答案 249
编程练习 254
编程项目 254
第7章 数组 259
概述 260
预备知识 260
7.1数组入门 260
声明和引用数组 260
数组在内存中的表示 263
初始化数组 265
7.2函数中的数组 267
索引变量作为函数参数 267
整个数组作为函数参数 269
const参数修饰符 271
返回数组的函数 273
7.3数组编程 282
部分填充数组 282
7.4多维数组 292
多维数组基础 292
多维数组参数 293
小结 298
自测题答案 298
编程练习 301
编程项目 302
第8章 字符串和向量 309
概述 310
预备知识 310
8.1字符串的数组类型 310
C字符串值和C字符串变量 311
<cstring>中的其他函数 315
C字符串输入和输出 318
C字符串到数值的转换和可靠输入 320
8.2标准string类 324
标准类string简介 324
string类的I/O 326
用string类进行字符串处理 330
string对象和C字符串之间的转换 335
字符串和数字之间的转换 336
8.3向量 336
向量基础知识 336
效率问题 339
小结 341
自测题答案 341
编程练习 343
编程项目 343
第9章 指针和动态数组 349
概述 350
预备知识 350
9.1指针 350
指针变量 351
基本内存管理 356
静态变量和自动变量 356
9.2动态数组 359
数组变量和指针变量 359
创建和使用动态数组 361
指针运算(选读) 364
多维动态数组(选读) 365
小结 367
自测题答案 367
编程练习 368
编程项目 368
第10章 定义类 373
概述 374
预备知识 374
10.1结构 374
用于异种数据的结构 374
结构作为函数参数 378
对结构进行初始化 380
10.2类 382
定义类和成员函数 382
公共成员和私有成员 386
总结类的一些特征 396
用于初始化的构造函数 397
10.3抽象数据类型 405
用于生成抽象数据类型的类 405
10.4继承 411
派生类 412
定义派生类 413
小结 416
自测题答案 416
编程练习 420
编程项目 420
第11章 类中的友元函数、重载操作符和数组 425
概述 426
预备知识 426
11.1友元函数 426
友元函数 428
实现digit to int(选读) 435
const参数修饰符 437
11.2重载操作符 441
重载操作符 442
用于自动类型转换的构造函数 444
重载一元操作符 445
重载>>和<< 446
11.3数组和类 452
类数组 452
数组作为类成员 455
11.4类和动态数组 458
析构函数 460
拷贝构造函数 463
重载赋值操作符 467
小结 470
自测题答案 470
编程练习 476
编程项目 477
第12章 独立编译和命名空间 483
概述 484
预备知识 484
12.1独立编译 484
ADT回顾 484
使用#ifndef 492
12.2命名空间 495
命名空间和using预编译指令 495
创建命名空间 496
限定名称 498
命名空间的微妙之处(选读) 499
无名命名空间 500
小结 505
自测题答案 505
编程练习 506
编程项目 508
第13章 指针和链表 509
概述 510
预备知识 510
13.1节点和链表 510
节点 511
nullptr 513
链表 514
在表头插入节点 515
搜索链表 518
指针作为迭代器 520
在列表中插入和删除节点 521
链表的变体 524
类构成的链表 526
13.2栈和队列 528
栈 528
队列 532
小结 536
自测题答案 536
编程练习 538
编程项目 538
第14章 递归 545
概述 546
预备知识 546
14.1面向任务的递归函数 546
深入递归 552
用于递归的栈 554
递归与迭代 555
14.2面向值的递归函数 556
要返回值的递归函数的常规形式 556
14.3递归思想 560
递归设计技术 560
小结 570
自测题答案 570
编程练习 573
编程项目 573
第15章 继承 577
概述 578
预备知识 578
15.1继承基础 578
派生类 580
派生类中的构造函数 585
protected限定符 588
重定义成员函数 590
重定义与重载的比较 592
访问重定义的基函数 593
15.2继承细节 594
不继承的函数 594
派生类中的赋值操作符和拷贝构造函数 595
派生类中的析构函数 595
15.3多态性 596
晚期绑定 597
C++虚函数 597
虚函数和扩展类型兼容性 601
小结 607
自测题答案 607
编程练习 610
编程项目 612
第16章 异常处理 617
概述 618
预备知识 618
16.1异常处理基础 618
异常处理的简单例子 619
定义自己的异常类 625
多个throw块和catch块 626
在函数中抛出异常 629
异常规范 630
16.2用于异常处理的编程技术 632
抛出异常的时机 632
异常类层次结构 634
测试可用内存 634
重新抛出异常 635
小结 636
自测题答案 636
编程练习 637
编程项目 638
第17章 模板 641
概述 642
预备知识 642
17.1用于算法抽象的模板 642
函数模板 643
17.2用于数据抽象的模板 651
类模板的语法 651
小结 657
自测题答案 657
编程练习 659
编程项目 659
第18章 标准模板库 663
概述 664
预备知识 664
18.1迭代器 664
using声明 665
迭代器基础 665
迭代器的种类 670
常量和可变迭代器 673
逆向迭代器 673
其他种类的迭代器 675
18.2容器 675
顺序容器 676
容器配接器stack和queue 679
关联容器set和map 682
效率问题 687
18.3泛型算法 688
运行时间和大O表示法 689
容器访问运行时间 691
不修改容器的算法 692
会修改容器的算法 695
set算法 696
排序算法 697
小结 698
自测题答案 698
编程练习 699
编程项目 700
附录1 C++关键字 705
附录2 操作符的优先级 706
附录3 ASCⅡ字符集 707
附录4 部分库函数 708
附录5 内联函数 712
附录6 重载数组索引方括号 713
附录7 this指针 714
附录8 将操作符重载为成员操作符 716