第1章 进入对象世界 1
1.1 对象世界及其建模 1
1.1.1 对象组成的世界 1
1.1.2 程序=模型+表现 3
1.1.3 UML建模 7
习题1.1 11
1.2 引例1:学生类 12
1.2.1 类Student的定义 12
1.2.2 类Student的实现 16
1.2.3 对象的生成与类的测试 18
1.2.4 用构造函数初始化对象 21
1.2.5 语法小结 24
习题1.2 27
1.3 引例2:计算器 31
1.3.1 问题与建模 31
1.3.2 类的C++描述 31
1.3.3 类的测试与主函数设计 33
1.3.4 程序改进之一:为计算器增加除运算 34
1.3.5 程序改进之二:具有灵活性的计算器类 37
1.3.6 语法小结 41
习题1.3 42
1.4 引例3:累加器 44
1.4.1 问题与建模 44
1.4.2 类的C++描述 45
1.4.3 循环结构的测试与主函数设计 48
1.4.4 do-while循环和for循环 49
1.4.5 语法小结 50
习题1.4 51
1.5 引例4:圆和圆环 52
1.5.1 问题与建模 52
1.5.2 具有聚合关系的类Circle与类Ring 53
习题1.5 58
1.6 引例5:简单的公司人员体系 59
1.6.1 问题描述与建模 59
1.6.2 派生关系的C++描述 59
1.6.3 语法小结 68
习题1.6 68
第2章 算法基础 72
2.1 选择 72
2.1.1 三中取大 72
2.1.2 报站器 76
习题2.1 79
2.2 穷举 80
2.2.1 找出1000之内能被13整除的数 80
2.2.2 找素数 83
习题2.2 85
2.3 递推 87
2.3.1 阶乘计算器 87
2.3.2 用二分法求一元方程的根 88
习题2.3 91
2.4 递归 92
2.4.1 阶乘的递归求解 92
2.4.2 汉诺塔问题 93
习题2.4 96
2.5 仿真 97
2.5.1 随机问题模拟:小学生算术测试器 97
2.5.2 事件步长法模拟:原子能反应堆的壁厚设计 102
2.5.3 时间步长法模拟:盐水池问题 104
习题2.5 107
第3章 数据类型与I/O流 109
3.1 变量和常量 109
3.1.1 变量 109
3.1.2 常量 111
习题3.1 113
3.2 基本数据类型 114
3.2.1 数据存储格式:定点格式与浮点格式 114
3.2.2 整数类型 115
3.2.3 字符类型 117
3.2.4 实型类型 118
3.2.5 数据类型转换 119
3.2.6 类型重命名运算符typedef 120
3.2.7 存储空间计算符sizeof 121
习题3.2 122
3.3 类与结构体——组织不同类型的组合数据类型 123
3.3.1 结构体类型和结构体变量 123
3.3.2 结构体变量初始化 124
3.3.3 转换构造函数 124
习题3.3 126
3.4 数组——按顺序组织同类型数据 128
3.4.1 数组基础 128
3.4.2 对象数组 130
3.4.3 数组作为类的数据成员 132
3.4.4 数组元素的搜索与排序 135
3.4.5 数组应用:堆栈 140
3.4.6 二维数组 142
习题3.4 144
3.5 字符串 146
3.5.1 C字符串 146
3.5.2 标准C++的string类 150
习题3.5 151
3.6 流类 153
3.6.1 流类与流类库 153
3.6.2 标准流对象与标准I/O流操作 154
3.6.3 流的格式化 155
3.6.4 文件I/O流 157
3.6.5 流的错误状态及其处理 160
习题3.6 161
第4章 C++过程组织与管理 163
4.1 函数参数传递与函数返回 163
4.1.1 函数调用时的值传递与引用传递 163
4.1.2 关于函数参数的计算顺序 166
4.1.3 函数返回的问题 166
习题4.1 168
4.2 函数名重载 170
4.2.1 函数名重载的基本规则 170
4.2.2 构造函数重载 171
4.2.3 在派生类中重定义基类成员函数 173
习题4.2 174
4.3 操作符重载 176
4.3.1 操作符重载及其规则 176
4.3.2 成员函数形式的操作符重载 177
4.3.3 友元函数形式的操作符重载 183
4.3.4 赋值操作符重载 185
习题4.3 187
4.4 程序编译组织 190
4.4.1 程序文件与项目 190
4.4.2 头文件 191
4.4.3 条件编译 192
习题4.4 193
第5章 C++程序安全机制 195
5.1 变量的访问属性—基于作用域的安全机制 195
5.1.1 变量名的作用域、可见性和生命期 195
5.1.2 C++的存储属性 198
5.1.3 C++内存管理 202
习题5.1 203
5.2 名字空间——基于名字的安全机制 204
5.2.1 名字空间及其定义 204
5.2.2 名字空间成员的使用 206
5.2.3 无名名字空间和全局名字空间 207
习题5.2 208
5.3 对象成员的访问控制——基于封装保护的安全机制 209
5.3.1 类层次结构中的三种访问控制属性 209
5.3.2 类作用域 211
5.3.3 友元关系 213
5.3.4 类的静态成员 216
5.3.5 多基派生与虚拟派生 221
习题5.3 226
5.4 const保护 228
5.4.1 用const定义常量 229
5.4.2 const修饰函数 230
5.4.3 const成员与const对象 232
习题5.4 234
5.5 异常处理 235
5.5.1 程序错误与程序异常 235
5.5.2 C++异常处理 237
5.5.3 函数异常规格说明 245
5.5.4 常用异常处理技术 246
5.5.5 标准异常 251
习题5.5 252
第6章 指针技术 256
6.1 指针的概念 256
6.1.1 指针=基类型+地址 256
6.1.2 指针的操作 258
6.1.3 多级指针 261
6.1.4 悬空指针、空指针与void指针 261
6.1.5 用const修饰指针及其引用 261
习题6.1 264
6.2 数组的指针形式 266
6.2.1 数组名与指向数组的指针 266
6.2.2 二维数组的指针形式 268
6.2.3 指针与C-字符串 270
习题6.2 271
6.3 函数与指针 275
6.3.1 向函数传递地址 275
6.3.2 main()函数的参数 278
6.3.3 返回指针的函数 279
6.3.4 函数名指针与指向函数的指针 280
习题6.3 285
6.4 指向对象的指针 286
6.4.1 指向对象指针的意义 286
6.4.2 指向对象指针的使用 288
6.4.3 this指针 288
习题6.4 291
6.5 动态内存分配 292
6.5.1 动态存储分配和静态存储分配 292
6.5.2 单个数据的动态存储分配 292
6.5.3 对象的浅复制与深复制 294
6.5.4 数组的动态存储分配 295
6.5.5 对象和数据成员的动态存储分配 296
6.5.6 动态存储分配中的异常处理 298
习题6.5 300
6.6 链表 302
6.6.1 链表的概念 302
6.6.2 单链表的类结构 304
6.6.3 单链表的操作与成员函数设计 305
6.6.4 链表的测试 309
习题6.6 312
第7章 程序运行时的多态性 313
7.1 虚函数与动态绑定 313
7.1.1 动态绑定与虚函数 313
7.1.2 基于基类指针的动态绑定 315
7.1.3 虚函数表 316
7.1.4 虚函数的限制与虚析构函数 318
7.1.5 纯虚函数与抽象类 318
习题7.1 319
7.2 运行时类型鉴别 321
7.2.1 dynamic_cast操作符 322
7.2.2 用typeid获得对象类型信息 328
习题7.2 330
第8章 模板 332
8.1 算法抽象模板——函数模板 332
8.1.1 从函数重载到函数模板 332
8.1.2 模板函数重载 333
8.1.3 函数模板的具体化 335
习题8.1 337
8.2 数据抽象模板——类模板 338
8.2.1 类模板的定义 339
8.2.2 类模板的实例化 340
8.2.3 类模板的使用 341
8.2.4 类模板实例化时的异常处理 342
习题8.2 343
8.3 标准模板库 346
8.3.1 容器 346
8.3.2 算法与函数对象 348
8.3.3 迭代器 353
8.3.4 STL标准头文件 355
习题8.3 356
附录A C++操作符的优先级别和结合方向 358
附录B 重要概念和资料索引 360
参考文献 363