第1章 类和对象 1
1.1 从C到C++ 3
1.1.1 C++的诞生 3
1.1.2 C++对C的扩充 3
1.1.3 面向对象和面向过程的区别 9
1.1.4 命名空间 12
1.2 面向对象程序设计的基本概念 17
1.2.1 类 17
1.2.2 对象 18
1.2.3 封装与数据隐藏 18
1.2.4 继承 18
1.2.5 多态性 19
1.2.6 消息 19
1.3 类和对象的定义 19
1.3.1 类的定义 20
1.3.2 成员函数的定义 23
1.3.3 类对象的定义 26
1.3.4 对象成员的访问 27
1.3.5 类对象的内存分配 32
1.3.6 this指针 33
1.4 构造函数和析构函数 35
1.4.1 构造函数的定义 35
1.4.2 构造函数的重载 38
1.4.3 带默认参数的构造函数 40
1.4.4 析构函数 42
1.4.5 拷贝构造函数和默认拷贝构造函数 43
1.5 综合应用举实例 48
习题1 50
第2章 类和对象的进一步应用 55
2.1 对象的进一步应用 57
2.1.1 堆对象 57
2.1.2 对象数组 57
2.1.3 类对象作为成员 59
2.1.4 面向对象程序中的常量 62
2.2 静态成员 65
2.2.1 静态数据成员 65
2.2.2 静态成员函数 67
2.3 友元函数和友元类 71
2.3.1 友元函数 71
2.3.2 友元类 75
2.4 string类 77
2.4.1 char型字符串 77
2.4.2 string型字符串定义 77
2.4.3 string类构造函数 78
2.4.4 string类成员函数 79
2.5 综合应用实例 82
习题2 86
第3章 继承与派生 91
3.1 继承与派生的基础知识 93
3.1.1 继承与派生的基本概念 93
3.1.2 派生类的声明方式 94
3.1.3 派生类的构成 97
3.2 类的继承方式 98
3.2.1 公有继承 98
3.2.2 私有继承 100
3.2.3 保护继承 102
3.2.4 继承方式的总结和比较 102
3.3 派生类的构造函数与析构函数 103
3.3.1 简单派生类的构造函数 104
3.3.2 析构函数 105
3.3.3 复杂派生类构造函数和析构函数 106
3.3.4 派生友元类 109
3.4 基类对象与派生类对象的相互转换 110
3.5 多重继承 112
3.5.1 多重继承的定义 112
3.5.2 多重继承中的二义性问题 114
3.6 虚继承和虚基类 119
3.6.1 虚继承和虚基类的定义 119
3.6.2 虚基类及其派生类构造函数执行顺序 122
3.7 C++11新特性之继承构造函数和委派构造函数 124
3.7.1 继承构造函数 124
3.7.2 委派构造函数 125
3.8 综合应用实例 126
习题3 139
第4章 多态性 147
4.1 多态性的概念 149
4.2 运算符重载 149
4.2.1 运算符重载概述 149
4.2.2 运算符重载的实现 150
4.2.3 单目运算符重载 151
4.2.4 双目运算符重载 153
4.2.5 赋值运算符重载 156
4.2.6 下标运算符[]重载 159
4.2.7 关系运算符重载 161
4.2.8 类型转换运算符重载 163
4.2.9 函数对象 164
4.3 联编和虚函数 165
4.3.1 静态联编和动态联编 165
4.3.2 虚函数的引入 165
4.3.3 虚函数的定义 168
4.3.4 动态联编的工作机制 170
4.3.5 虚析构函数 171
4.4 纯虚函数和抽象类 173
4.4.1 纯虚函数 173
4.4.2 抽象类 173
4.5 综合应用实例 176
习题4 181
第5章 输入/输出流 183
5.1 输入/输出流的基本概念 185
5.1.1 从C语言的输入/输出函数到C++的输入/输出流 185
5.1.2 流的概念及流类库 186
5.1.3 流的深入探讨 187
5.2 面向标准设备的输入/输出流 188
5.2.1 标准流对象 188
5.2.2 标准输入/输出流的格式化 189
5.2.3 用流成员函数实现输入/输出 195
5.3 面向文件的输入/输出流 197
5.3.1 文件流类与文件流对象 197
5.3.2 文件的打开和关闭 198
5.3.3 文本文件的输入/输出(读/写) 200
5.3.4 二进制文件的输入/输出(读/写) 202
5.3.5 文件的随机访问 204
5.4 面向内存的字符串流 206
5.5 自定义数据类型的输入/输出 210
5.6 综合应用实例 211
习题5 216
第6章 异常处理 219
6.1 异常的概念 221
6.2 异常处理机制 222
6.2.1 异常处理机制的组成 222
6.2.2 异常处理的实现 222
6.3 异常处理规范 227
6.4 标准库中的异常类 229
6.5 C++11引入的异常处理 230
6.6 综合应用实例 231
习题6 236
第7章 模板 237
7.1 模板的概念 239
7.2 函数模板 239
7.2.1 函数模板语法 240
7.2.2 函数模板实例化 241
7.2.3 函数模板中模板参数隐式转换产生的错误 243
7.2.4 用户定义的参数类型 245
7.2.5 函数模板和模板函数 247
7.2.6 使用函数模板需要注意的问题 247
7.3 类模板 248
7.3.1 类模板的语法 249
7.3.2 类模板实例化 250
7.3.3 类模板的派生和继承 258
7.3.4 使用类模板的注意事项 260
7.4 C++11标准的模板新内容 261
7.4.1 模板的右尖括号 261
7.4.2 别名模板 261
7.4.3 函数模板的默认参数 262
7.4.4 变长参数 264
7.5 综合应用实例 266
习题7 270
第8章 标准模板库(STL)的介绍及应用 273
8.1 标准模板库(STL)的概念 275
8.1.1 什么是STL 275
8.1.2 STL的组成部分 275
8.1.3 STL对C++的影响 276
8.2 容器 276
8.2.1 容器简介 276
8.2.2 容器的结构 277
8.2.3 容器的使用 278
8.3 迭代器 284
8.3.1 输入迭代器 285
8.3.2 输出迭代器 285
8.3.3 前向迭代器 286
8.3.4 双向迭代器 287
8.3.5 随机访问迭代器 287
8.3.6 迭代器的使用 287
8.4 算法 288
8.4.1 算法和函数对象 288
8.4.2 算法分类介绍 289
8.5 综合应用实例 293
习题8 296
第9章 面向对象程序设计实例 297
9.1 图书管理系统需求分析 299
9.1.1 需求分析的任务 299
9.1.2 图书管理系统需求描述 299
9.1.3 图书管理系统需求 299
9.2 图书管理系统需求模型 300
9.2.1 图书管理系统用例图 300
9.2.2 图书管理系统用例规约 301
9.3 图书管理系统设计 308
9.3.1 分析类 308
9.3.2 顺序图 308
9.3.3 设计类图 309
9.3.4 系统结构设计 310
9.4 图书管理系统的实现 311
9.4.1 类的定义 311
9.4.2 类的实现 313
9.4.3 用户界面设计 322
9.4.4 系统主函数 323
9.4.5 系统管理员功能模块 325
9.4.6 普通管理员功能 328
习题9 331
附录A 常用容器与算法介绍 332
A.1 常用容器 332
A.1.1 向量(vector) 332
A.1.2 列表(1ist) 334
A.1.3 双队列(deque) 336
A.1.4 栈(stack) 339
A.1.5 队列(queue) 339
A.2 常用算法 340
A.2.1 非修正算法 340
A.2.2 修正算法 341
A.2.3 排序算法 342
A.2.4 数值计算算法 344
附录B C++新特性 345
附录C C/C++跨平台开源开发环境——Code::Blocks 351
参考文献 356