第1章 初识C++ 1
1.1 C++简介 1
1.1.1 C++的发展史 1
1.1.2 C++的特点 2
1.1.3 C++应用领域 3
1.2 第一个C++程序 4
1.3 C++对C语言的扩充 7
1.3.1 bool类型 7
1.3.2 C++中的类型转换 7
1.3.3 C++中的字符串string 9
1.3.4 引用 12
1.3.5 动态分配I内存(new与delete) 15
1.3.6 默认参数 17
1.3.7 内联函数 18
1.3.8 重载函数 19
1.4 小结 21
第2章 类与对象 23
2.1 面向对象程序设计 23
2.1.1 面向过程程序设计 23
2.1.2 面向对象程序设计 24
2.1.3 面向对象的基本概念 25
2.2 类与对象 26
2.2.1 类和对象的关系 26
2.2.2 类的定义 27
2.2.3 类的成员 28
2.2.4 对象的创建与使用 29
2.2.5 this指针 31
2.2.6 类的成员的访问控制 33
2.3 构造函数和析构函数 35
2.3.1 构造函数 35
2.3.2 包含对象成员的类的构造函数 41
2.3.3 析构函数 44
2.3.4 拷贝构造函数 46
2.3.5 深拷贝与浅拷贝 50
2.4 类中特殊的成员变量 54
2.4.1 用static修饰数据成员 54
2.4.2 用const修饰数据成员 57
2.5 类中特殊的成员函数 58
2.5.1 静态成员函数 58
2.5.2 用const修饰的成员函数 61
2.5.3 类中的内联函数 62
2.6 友元 64
2.6.1 友元函数 64
2.6.2 友元类 66
2.7 小结 67
第3章 继承与多态 69
3.1 继承 69
3.1.1 继承的概念 69
3.1.2 继承权限 72
3.1.3 类型兼容 80
3.2 派生类 83
3.2.1 构造函数 83
3.2.2 析构函数 85
3.2.3 隐藏基类函数 87
3.3 多重继承 88
3.3.1 声明多重继承的方式 88
3.3.2 多重继承派生类的构造函数 90
3.3.3 多重继承引起的二义性 93
3.3.4 虚基类 98
3.4 多态 102
3.4.1 多态性概念 102
3.4.2 虚函数 103
3.4.3 纯虚函数 109
3.5 抽象类与内部类 111
3.5.1 抽象类 111
3.5.2 内部类 112
3.6 小结 116
第4章 运算符重载 118
4.1 运算符重载的意义 118
4.2 类对象的四则运算 119
4.3 运算符重载的规则 121
4.3.1 运算符重载规则 121
4.3.2 运算符重载方式 121
4.4 常用运算符的重载 124
4.4.1 输入输出运算符的重载 124
4.4.2 关系运算符的重载 126
4.4.3 赋值运算符重载 127
4.4.4 下标运算符重载 129
4.4.5 类型转换函数 131
4.5 小结 133
第5章 模板 134
5.1 函数模板 134
5.1.1 定义一个函数模板 134
5.1.2 函数模板的实例化 135
5.1.3 函数模板的重载 137
5.2 类模板 140
5.2.1 定义一个类模板并实例化 140
5.2.2 在类模板外部定义成员函数 142
5.2.3 类模板与友元函数 144
5.3 派生与模板 148
5.3.1 模板的参数 148
5.3.2 类模板的派生 151
5.4 模板特化 152
5.5 小结 155
第6章 I/O流 156
6.1 C++中的输入输出 156
6.1.1 C++中输入输出的分类 156
6.1.2 C++I/O流类的安全性与可扩展性 157
6.2 I/O流类库简介 157
6.2.1 I/O流类库 157
6.2.2 缓冲区类 158
6.3 标准输出流和标准输入流 159
6.3.1 提取运算符和插入运算符 160
6.3.2 预定义流对象 161
6.3.3 标准输出流 163
6.3.4 标准输入流 165
6.4 格式化控制 168
6.4.1 格式标志 168
6.4.2 精度、域宽、填充字符的设置 170
6.4.3 操作符的格式控制 172
6.5 文件流 173
6.5.1 构建文件流对象 174
6.5.2 文件的打开与关闭 174
6.5.3 文件的读写 176
6.5.4 文件的随机读写 180
6.6 字符串流 182
6.7 小结 184
第7章 异常与断言 186
7.1 异常的概念 186
7.2 异常处理 187
7.2.1 异常处理机制 187
7.2.2 异常处理结构 188
7.2.3 异常处理模式 192
7.2.4 异常规范说明 193
7.3 异常类 193
7.4 捕捉异常 196
7.4.1 重抛异常 196
7.4.2 捕捉所有异常 198
7.5 标准库中的异常处理 198
7.6 断言 201
7.6.1 断言概述 201
7.6.2 断言的使用 201
7.7 小结 202
第8章 初识STL 203
8.1 STL简介 203
8.2 序列式容器 205
8.2.1 序列式容器概述 205
8.2.2 vector类模板 208
8.2.3 deque类模板 211
8.2.4 list类模板 214
8.3 关联型容器 218
8.3.1 关联型容器概述 218
8.3.2 set/multiset类模板 220
8.3.3 map/multimap类模板 224
8.4 迭代器 228
8.4.1 迭代器概述 228
8.4.2 输入迭代器与输出迭代器 229
8.4.3 前向迭代器 230
8.4.4 双向迭代器与随机访问迭代器 230
8.5 迭代器适配器 230
8.5.1 逆向迭代器 230
8.5.2 插入迭代器 232
8.5.3 流迭代器 233
8.6 迭代器辅助函数 235
8.7 算法 236
8.7.1 算法概述 237
8.7.2 常用算法 237
8.8 小结 240
第9章 设计模式与C++11新特性 241
9.1 设计模式 241
9.1.1 设计模式简介 241
9.1.2 单例模式 242
9.1.3 工厂模式 243
9.1.4 代理模式 248
9.1.5 迭代器模式 250
9.2 C++11常用新特性 254
9.2.1 auto类型说明符 254
9.2.2 统一的初始化 254
9.2.3 右值引用 256
9.2.4 空指针常量 256
9.2.5 限定作用域的枚举类型 257
9.2.6 lambda表达式 258
9.2.7 基于范围的for语句 259
9.2.8 委托构造函数 260
9.2.9 继承构造函数 261
9.2.10 管理虚方法:override和final 263
9.2.11 外部模板 264
9.2.12 可变参数模板 266
9.2.13 静态断言 268
9.3 小结 269
第10章 综合项目——物流货仓管理系统 270
10.1 项目分析 270
10.1.1 功能描述 270
10.1.2 项目分析 271
10.2 项目实现 272
10.2.1 创建项目 272
10.2.2 项目设计 273
10.2.3 项目实现 275
10.2.4 主函数实现 293
10.2.5 效果展示 293
10.3 项目心得 298
附录 string类常用的一些函数 300