第1章 面向对象概述 1
1.1 C++概述 1
1.1.1 C++的发展 1
1.1.2 为什么要学习C++ 2
1.2 面向过程和面向对象 2
第2章 C到C++的扩展 5
2.1 命名空间 5
2.1.1 什么是命名空间 5
2.1.2 命名空间的使用 6
2.1.3 命名空间完整示例代码 7
2.1.4 C++标准库和std命名空间 8
2.2 小程序“Hello World” 10
2.2.1 输出“Hello World” 10
2.2.2 C++的输入和输出(cin和cout) 10
2.3 变量定义的位置 11
2.4 register关键字的变化 12
2.5 struct的加强 13
2.6 三目运算符的加强 14
2.6.1 C与C++中三目运算符的不同 14
2.6.2 如何在C语言中实现C++的特性 14
2.7 bool类型 15
2.8 C/C++中的const 16
2.8.1 C中的const 16
2.8.2 C++中的const 17
2.8.3 const与define 18
2.9 C++中的引用 20
2.9.1 引用的概念与基本使用 20
2.9.2 引用作为函数参数 21
2.9.3 引用作为函数返回值 23
2.9.4 指针引用 24
2.9.5 常引用 26
2.9.6 引用的本质 27
2.10 C++内联函数 28
2.10.1 内联函数的概念和使用 28
2.10.2 内联函数的特点和使用限制 29
2.11 C++函数的默认参数 29
2.12 C++函数的占位参数 30
2.13 C++中的函数重载 32
2.13.1 函数重载的概念 32
2.13.2 C++函数重载与函数指针 34
2.13.3 函数重载的二义性 35
2.13.4 函数重载与const形参 35
2.14 C++的动态内存分配 37
2.14.1 new与delete的基本用法 37
2.14.2 拓展:多维数组的动态创建与释放 38
第3章 类和对象 40
3.1 面向对象编程介绍 40
3.1.1 什么是面向对象 40
3.1.2 面向对象的优点 40
3.1.3 面向对象的特点 41
3.1.4 总结 42
3.2 类和对象 43
3.2.1 类和对象的概念 43
3.2.2 类的访问控制 45
3.2.3 类的使用案例 48
3.2.4 面向对象编程实例 49
3.3 对象的构造和析构 52
3.3.1 构造函数 52
3.3.2 构造函数的重载和调用 53
3.3.3 拷贝构造函数 56
3.3.4 默认构造函数 58
3.3.5 析构函数 59
3.3.6 构造函数的参数初始化列表 60
3.3.7 对象的动态创建和释放 63
3.4 浅拷贝和深拷贝 64
3.4.1 浅拷贝问题分析 64
3.4.2 深拷贝 66
3.5 静态成员变量和静态成员函数 67
3.5.1 静态成员变量 67
3.5.2 静态成员函数 70
3.6 C++对象的内存模型 72
3.6.1 编译器对属性和方法的处理机制 72
3.6.2 this指针 74
3.6.3 const修饰成员函数 75
3.7 友元函数和友元类 76
3.7.1 友元函数 77
3.7.2 友元类 80
3.7.3 友元函数的几点说明 82
第4章 运算符重载 83
4.1 概念 83
4.1.1 什么是运算符重载 83
4.1.2 运算符重载的使用 84
4.2 运算符重载的规则 89
4.3 常用的运算符重载 91
4.3.1 前置++与后置++的重载 91
4.3.2 左移〈〈与右移〉〉操作符的重载 93
4.3.3 成员函数与友元函数重载的选择 97
4.4 赋值运算符=的重载 97
4.5 数组下标运算符[]的重载 100
4.6 函数调用运算符()的重载 103
4.7 new和delete运算符的重载 103
第5章 继承与派生 107
5.1 继承的概念及语法 107
5.1.1 类之间的关系 108
5.1.2 继承关系 108
5.1.3 继承的使用 108
5.2 派生类的访问控制 110
5.3 继承中的对象内存模型 114
5.4 派生类的构造函数和析构函数 115
5.4.1 派生类的构造函数 115
5.4.2 派生类的析构函数 117
5.4.3 继承与组合混搭情况下构造和析构调用原则 119
5.5 继承时的名字遮蔽 121
5.6 继承中的static关键字 123
5.7 继承中的类型兼容性原则 125
5.8 多继承 128
5.8.1 多继承的概念 128
5.8.2 多继承中的构造与析构 129
5.8.3 多继承导致的二义性问题 131
5.8.4 多继承时的对象内存模型 132
5.9 虚继承 135
5.9.1 虚继承与虚基类 135
5.9.2 虚继承时的构造函数 139
5.9.3 虚继承时的对象内存模型 141
第6章 多态 143
6.1 多态的概念与使用 143
6.2 虚函数详解 147
6.3 虚析构函数 149
6.4 多态的实现机制 153
6.4.1 多态原理 153
6.4.2 构造函数中调用虚函数能否实现多态 155
6.4.3 父类指针操作子类数组 157
6.5 多继承下的多态 159
6.6 虚继承下的多态 161
6.7 纯虚函数和抽象类 162
6.8 typeid运算符 165
6.9 静态绑定和动态绑定 168
第7章 模板 171
7.1 函数模板 171
7.1.1 函数模板语法 171
7.1.2 函数模板和函数重载 176
7.1.3 函数模板机制 178
7.2 类模板 179
7.2.1 单个类的类模板语法 179
7.2.2 继承中的类模板语法 182
7.2.3 类模板的使用 184
7.3 类模板中的关键字static 191
第8章 异常 193
8.1 什么是异常 193
8.2 异常的语法 194
8.3 异常类型以及多级catch 195
8.4 throw详解 197
8.5 标准库异常 199
第9章 输入/输出流 201
9.1 输入/输出流介绍 201
9.1.1 输入/输出流的理解 201
9.1.2 流的理解 202
9.1.3 为什么要引用输入/输出流 203
9.1.4 流的缓冲区 204
9.2 标准输入/输出流 205
9.2.1 标准输入/输出流对象 205
9.2.2 输出流的使用 205
9.2.3 输入流的使用 206
9.2.4 输入/输出格式化 211
9.3 文件输入/输出流 215
9.3.1 文件的打开与关闭 215
9.3.2 文件的读写 217
9.4 字符串流的读写 219
第10章 标准模板库STL 222
10.1 STL概述 222
10.1.1 STL基本概念 222
10.1.2 容器 223
10.1.3 算法 224
10.1.4 迭代器 225
10.1.5 C++标准库 225
10.2 常用容器 225
10.2.1 string 225
10.2.2 vector容器 232
10.2.3 deque容器 237
10.2.4 list容器 240
10.2.5 map容器 243
10.2.6 set容器 247
10.3 常用算法 247
10.3.1 算法概述 247
10.3.2 算法分类 247
10.3.3 算法中函数对象和谓词 250
10.3.4 预定义函数对象和谓词 255
10.3.5 函数适配器 256
第11章 C++11/14新标准 259
11.1 概述 259
11.2 实用性加强 260
11.2.1 新类型 260
11.2.2 统一初始化 260
11.2.3 nullptr与constexpr 261
11.2.4 类型推导 264
11.2.5 基于范围的for循环 266
11.2.6 强类型枚举 266
11.2.7 智能指针 268
11.2.8 右值引用:移动语义和完美转发 275
11.3 类的加强 277
11.3.1 特殊成员函数 277
11.3.2 委托构造 278
11.3.3 继承构造 278
11.3.4 虚方法管理:override和final 278
11.3.5 显示禁用默认函数 279
11.4 对模板的加强 279
11.4.1 外部模板 279
11.4.2 尖括号〈〉 280
11.4.3 模板别名using= 280
11.4.4 默认模板参数 281
11.4.5 可变参数模板 281
11.5 lambda函数 282
11.6 对标准库的加强 283
11.6.1 新增容器 283
11.6.2 包装器 284
11.6.3 正则表达式 285
11.6.4 并发编程 286
第12章 常用设计模式 289
12.1 概述 289
12.2 设计模式的基本原则 289
12.3 常用设计模式 290
12.3.1 单例模式 290
12.3.2 简单工厂模式 298
12.3.3 工厂方法模式 300
12.3.4 抽象工厂模式 302
12.3.5 建造者模式 305
12.3.6 代理模式 308
12.3.7 装饰模式 310
12.3.8 策略模式 313
12.3.9 观察者模式 315
第13章 数据库基础 320
13.1 数据库简介 320
13.1.1 MySQL简介 320
13.1.2 关系型数据库 321
13.2 MySQL安装 322
13.2.1 MySQL安装测试 323
13.2.2 MySQL服务开启与使用 324
13.3 MySQL管理 324
13.3.1 MySQL用户设置 324
13.3.2 管理MySQL的命令 327
13.4 MySQL数据类型 327
13.4.1 整型 327
13.4.2 浮点型 328
13.4.3 定点数 329
13.4.4 字符串 329
13.4.5 二进制数据 330
13.4.6 日期和时间类型 330
13.4.7 数据类型的属性 331
13.5 MySQL使用 332
13.5.1 登录MySQL 332
13.5.2 建库建表 333
13.5.3 数据增删改查 334
13.5.4 删除整个数据库 336
13.6 MySQL接口使用 336
13.6.1 MySQL中文完全参考手册 336
13.6.2 获取错误信息 337
13.6.3 连接服务器 337
13.6.4 数据查询 339
13.6.5 MySQL的事务处理 342
13.6.6 索引 343
13.7 MySQL案例 344
第14章 Qt入门 349
14.1 Qt简介 349
14.1.1 QtCreator的下载与安装 349
14.1.2 QtCreator环境介绍 350
14.2 Hello World 352
14.2.1 编写Hello World程序 352
14.2.2 添加一个按钮 356
14.2.3 Qt的信号和槽机制 356
14.2.4 程序的发布和运行 357
14.3 窗口部件 358
14.3.1 基础窗口部件QWidget 359
14.3.2 对话框Qdialog 360
14.3.3 其他窗口部件 363
14.4 布局管理 365
14.4.1 布局管理系统 365
14.4.2 设置伙伴 367
14.4.3 设置Tab键顺序 367
14.5 常用控件介绍 368
14.5.1 常用控件需要加载的头文件 368
14.5.2 控件变量定义 369
14.5.3 控件初始化 369
14.5.4 在垂直布局中加载控件 369
14.5.5 常用控件使用 370
14.6 文件、目录和输入/输出 372
14.6.1 文件和目录 372
14.6.2 文本流和数据流(QDataStream和QtextStream) 374
14.7 Qt和数据库 375
14.7.1 连接到数据库 375
14.7.2 执行SQL语句 376
14.8 Qt网络编程 376
14.8.1 Qt和TCP 377
14.8.2 Qt和UDP 378
参考文献 380