第1章 概述 1
1.1计算机的工作模型 1
1.1.1冯·诺依曼体系结构 1
1.1.2硬件与软件 2
1.1.3机内信息表示 4
1.2程序设计 8
1.2.1程序设计范式 8
1.2.2程序设计步骤 9
1.2.3程序设计语言 11
1.3 C++语言 13
1.3.1概述 13
1.3.2 C++程序的构成 14
1.3.3 C++语言的词法 15
1.3.4 C++程序的运行步骤 17
1.4小结 18
1.5习题 19
第2章 简单数据的描述——基本数据类型和表达式 21
2.1概述 21
2.2基本数据类型 22
2.2.1整数类型 22
2.2.2实数类型 23
2.2.3字符类型 23
2.2.4逻辑类型 24
2.3数据的表现形式 24
2.3.1常量 25
2.3.2变量 27
2.3.3变量值的输入 29
2.4数据的基本运算——操作符 30
2.4.1操作符概述 30
2.4.2算术操作符 30
2.4.3关系与逻辑操作符 31
2.4.4位操作符 34
2.4.5赋值操作符 36
2.4.6其他操作符 37
2.4.7操作数的类型转换 38
2.5数据基本运算的实现——表达式 42
2.5.1表达式的构成与分类 42
2.5.2操作符的优先级和结合性 43
2.5.3表达式中操作数的类型转换 44
2.5.4带副作用操作符的表达式计算 45
2.5.5表达式结果的输出 45
2.6小结 46
2.7习题 47
第3章 程序的流程控制(算法)描述——语句 49
3.1概述 49
3.2顺序执行 50
3.2.1表达式语句 50
3.2.2复合语句 51
3.2.3空语句 52
3.3选择执行 53
3.3.1 if语句 53
3.3.2 switch语句 58
3.4循环(重复)执行 61
3.4.1迭代与穷举 61
3.4.2 while语句 62
3.4.3 do-while语句 63
3.4.4 for语句 64
3.4.5计数循环和事件循环 65
3.4.6循环程序设计实例 68
3.5无条件转移 73
3.5.1 goto语句 73
3.5.2 break语句 75
3.5.3 continue语句 76
3.6程序设计风格 77
3.6.1结构化程序设计 78
3.6.2关于goto语句 78
3.7小结 79
3.8习题 80
第4章 过程抽象——函数 82
4.1概述 82
4.1.1功能分解与复合 82
4.1.2子程序及子程序间的数据传递 83
4.2 C++函数 84
4.2.1函数的定义 84
4.2.2函数的调用 86
4.2.3值作为参数传递 88
4.2.4局部变量与全局变量 89
4.2.5 基于函数的过程式程序设计 91
4.3标识符的作用域与变量的生存期 92
4.3.1程序的多模块结构 92
4.3.2标识符的作用域 94
4.3.3命名空间 99
4.3.4变量的生存期(存储分配) 101
4.3.5基于栈的函数调用的实现 104
4.4递归函数 106
4.4.1什么是递归函数 106
4.4.2“分而治之”的程序设计 107
4.4.3递归与循环的选择 109
4.4.4递归函数应用实例 109
4.5标准函数库 111
4.6 C++函数的进一步讨论 112
4.6.1内联函数 112
4.6.2带默认值的形式参数 114
4.6.3函数名重载 115
4.6.4匿名函数——λ表达式 118
4.7小结 119
4.8习题 120
第5章 复合数据的描述——构造数据类型 123
5.1枚举类型——自定义值集的数据描述 123
5.1.1枚举类型的定义 123
5.1.2枚举类型的操作 124
5.2数组类型——由多个同类型元素构成的复合数据描述 126
5.2.1一维数组类型——线性复合数据的描述 127
5.2.2一维字符数组——字符串类型的一种实现 131
5.2.3二维数组类型——二维复合数据的描述 134
5.2.4数组类型的应用 138
5.3结构类型——由若干属性构成的复合数据描述 143
5.3.1结构类型的定义 143
5.3.2结构类型的操作 145
5.3.3结构类型的应用 148
5.4联合类型——用一种类型表示多种类型的数据 152
5.4.1联合类型的定义与操作 152
5.4.2联合类型的应用 153
5.5指针类型——内存地址的描述 156
5.5.1指针类型的定义 156
5.5.2指针类型的基本操作 158
5.5.3指针作为参数类型 162
5.5.4指针与动态变量 169
5.5.5指针与数组 181
5.5.6函数指针 185
5.5.7多级指针 188
5.6引用类型——变量的别名 189
5.6.1引用类型的定义 190
5.6.2引用作为参数类型 190
5.7小结 193
5.8习题 194
第6章 数据抽象——对象与类 198
6.1概述 198
6.1.1数据抽象与封装 198
6.1.2面向对象程序设计 201
6.1.3面向对象程序设计与过程式程序设计的对比 203
6.2类 206
6.2.1数据成员 206
6.2.2成员函数 207
6.2.3成员的访问控制——信息隐藏 208
6.3对象 211
6.3.1对象的创建 211
6.3.2对象的操作 212
6.3.3 this指针 213
6.4对象的初始化和消亡前处理 216
6.4.1构造函数 216
6.4.2析构函数 219
6.4.3成员对象的初始化 222
6.4.4拷贝构造函数 223
6.5类作为模块 227
6.5.1类模块的组成 227
6.5.2 Demeter法则 228
6.6对象与类的进一步讨论 229
6.6.1对常量对象的访问——常(const)成员函数 229
6.6.2同类对象之间的数据共享——静态(static)数据成员 231
6.6.3提高对象私有数据成员的访问效率——友元(friend) 233
6.6.4对象拷贝构造过程的优化——转移构造函数 237
6.6.5操作符重载 238
6.7小结 259
6.8习题 260
第7章 继承(类的复用)——派生类 264
7.1概述 264
7.1.1类之间的继承关系——基类与派生类 264
7.1.2继承的作用 264
7.2单继承 265
7.2.1单继承派生类的定义 265
7.2.2在派生类中访问基类成员——protected访问控制 266
7.2.3派生类对基类成员的访问控制——继承方式 269
7.2.4派生类对象的初始化和赋值操作 271
7.2.5单继承的应用实例 273
7.2.6类之间的聚集关系 274
7.3消息(成员函数调用)的动态绑定 276
7.3.1消息的多态性 276
7.3.2虚函数与消息的动态绑定 277
7.3.3纯虚函数和抽象类 280
7.3.4虚函数动态绑定的一种实现 285
7.4多继承 286
7.4.1多继承的必要性 286
7.4.2多继承派生类的定义 288
7.4.3命名冲突 288
7.4.4重复继承——虚基类 289
7.5小结 291
7.6习题 291
第8章 类属类型(泛型)——模板 295
8.1概述 295
8.2模板 296
8.2.1函数模板 296
8.2.2类模板 299
8.2.3模板的复用 301
8.3 C++标准模板库 303
8.3.1概述 303
8.3.2容器 305
8.3.3迭代器 308
8.3.4算法 308
8.4小结 314
8.5习题 315
第9章 输入/输出 316
9.1概述 316
9.2面向控制台的输入/输出 317
9.2.1基于函数库的控制台I/O 318
9.2.2基于类库的控制台I/O 320
9.2.3抽取/插入操作符“>>”和“<<”的重载 323
9.3面向文件的输入/输出 325
9.3.1文件概述 325
9.3.2基于函数库的文件I/O 326
9.3.3基于类库的文件I/O 332
9.4面向字符串变量的输入/输出 338
9.5小结 340
9.6习题 340
第10章 异常处理 341
10.1概述 341
10.1.1什么是异常 341
10.1.2异常处理的基本手段 342
10.2 C++异常处理机制 343
10.2.1 try、throw以及catch语句 343
10.2.2异常的嵌套处理 346
10.3基于断言的程序调试 347
10.4小结 348
10.5习题 349
第11章 Windows应用程序设计 350
11.1 Windows应用程序的基本结构 350
11.1.1 Windows应用程序简介 350
11.1.2消息驱动的程序结构 351
11.2面向对象的Windows应用程序结构 354
11.2.1 Windows应用程序中的对象 354
11.2.2微软基础类库(MFC) 355
11.2.3基于MFC“文档-视”结构的应用框架 357
11.3小结 359
11.4习题 359
附录A ASCII字符集及其编码 360
附录B IEEE浮点数的内部表示 361
附录C C++标准函数库中的常用函数 363
附录D C++编译预处理命令 365
附录E C++标准模板库(STL)常用功能 370
附录F MFC一些常用类的功能 377
参考文献 382