总目录
Mind Map
1. C++ 基础
- 1.1 - 程序结构和语句
- 1.2 - 注释
- 1.3 - 对象和变量
- 1.4 - 变量赋值和初始化
- 1.5 - iostream 简介:cout,cin 和 endl
- 1.6 - 未初始化变量和未定义行为
- 1.7 - 关键字和标识符
- 1.8 - 空白符和基本排版
- 1.9 - 字面量和操作符
- 1.10 - 表达式简介
- 1.11 - 开发你的第一个程序
- 1.x - 小结与测试 - C++基础
2. C++ 基础——函数和文件
- 2.1 - 函数简介
- 2.2 - 函数返回值
- 2.3 - void 函数
- 2.4 - 函数形参和实参
- 2.5 - 局部作用域
- 2.6 - 为什么函数有用,如何高效使用函数
- 2.7 - 前向声明和定义
- 2.8 - 多文件程序
- 2.9 - 命名冲突和命名空间
- 2.10 - 预处理器简介
- 2.11 - 头文件
- 2.12 - 头文件防卫式声明
- 2.13 - 如何设计第一个程序
- 2.x - 小结与测试 - 函数与文件
3. 调试 C++ 程序 🚧
- 3.1 - 语法和语义错误
- 3.2 - 代码调试步骤
- 3.3 - 代码调试策略
- 3.4 — 基本代码调试技术
- 3.5 - 更多代码调试技术
- 3.6 - 使用集成调试器之单步调试
- 3.7 - 使用集成调试器之运行和断点
- 3.8 - 使用集成调试器之监控变量
- 3.9 - 使用集成调试器之调用栈
- 3.10 - 在问题发生前发现问题
- 3.x - 小结与测试 - 代码调试
4. 基础数据类型
- 4.1 - 基础数据类型简介
- 4.2 - Void
- 4.3 - 对象的大小和 sizeof 操作符
- 4.4 - 有符号整型
- 4.5 - 无符号整型以及为什么要避免使用它
- 4.6 - 固定宽度整型和 size_t
- 4.7 - 科学计数法
- 4.8 - 浮点数
- 4.9 - 布尔值
- 4.10 - if 语句简介
- 4.11 - 字符
- 4.12 - 类型转换和 static_cast
- 4.13 - const 变量和符号常量
- 4.14 - 编译时常量、常量表达式和 constexpr
- 4.15 - 字面量
- 4.16 - 数值系统(十进制、二进制、十六进制和八进制)
- 4.17 - std::string 简介
- 4.18 - std::string_view 简介
- 4.x - 小结与测试 - 基本数据类型
5. 运算符
- 5.1 - 运算符优先级和结合律
- 5.2 - 数学运算符
- 5.3 - 求模和指数运算
- 5.4 - 自增自减运算符及其副作用
- 5.5 - 逗号和条件运算符
- 5.6 - 关系运算符和浮点数比较
- 5.7 - 逻辑运算符
- 5.x - 小结与测试 - 运算符
6. 作用域、生命周期和链接
- 6.1 - 复合语句(语句块)
- 6.2 - 用户定义命名空间和作用域解析运算符
- 6.3 - 局部变量
- 6.4 - 全局变量
- 6.5 - 变量遮蔽
- 6.6 - 内部链接
- 6.7 - 外部链接和变量前向声明
- 6.8 - 为什么非 const 全局变量是魔鬼
- 6.9 - 使用 inline 变量共享全局常量
- 6.10 - 静态局部变量
- 6.11 - 作用域和链接小结
- 6.12 - using 声明和 using 指令
- 6.13 - 内联函数
- 6.14 - Constexpr 和 consteval 函数
- 6.15 - 未命名和内联命名空间
- 6.x - 小结与测试 - 作用域、持续时间和链接
7. 控制流和错误处理 🚧
- 7.1 - 控制流
- 7.2 - if 语句和语句块
- 7.3 - 常见的 if 语句错误
- 7.4 - switch 语句基础
- 7.5 - switch fallthrough属性和作用域
- 7.6 - goto 语句
- 7.7 - 循环和 while 语句
- 7.8 - do-while 语句
- 7.9 - for 语句
- 7.10 - break 和 continue
- 7.11 - 挂起(提前结束程序)
- 7.12 - 代码测试
- 7.13 - 代码覆盖率
- 7.14 - C++ 中常见的语义错误
- 7.15 - 发现错误和处理错误
- 7.16 - std::in 和输入错误处理
- 7.17 - 断言和 static_assert
- 7.18 - 随机数生成器简介
- 7.19 - 使用 Mersenne Twister 生成随机数
- 7.x - 小结与测试 - 控制流和错误处理
8. 类型转换和函数重载
- 8.1 - 隐式类型转换
- 8.2 - 浮点数和整型提升
- 8.3 - 数值转换
- 8.4 - 算术转换
- 8.5 - 显式类型转换和static_cast
- 8.6 - typedef 和类型别名
- 8.7 - 使用 auto 关键字进行类型推断
- 8.8 - 函数的类型推断
- 8.9 - 函数重载
- 8.10 - 重载函数的区分
- 8.11 - 函数重载解析和不明确匹配
- 8.12 - 默认参数
- 8.13 - 函数模板
- 8.14 - 函数模板的实例化
- 8.15 - 具有多种类型的函数模板
- 8.x - 小结与测试
9. 复合类型-引用和指针
- 9.1 - 复合数据类型
- 9.2 - 值的分类(左值和右值)
- 9.3 - 左值引用
- 9.4 - const类型的左值引用
- 9.5 - 传递左值引用
- 9.6 - 指针简介
- 9.7 - 空指针
- 9.8 - 指针和const
- 9.9 - 按地址传递
- 9.10 - 按地址传递 Part2
- 9.11 - 按引用返回和按地址返回
- 9.12 - 指针、引用和const的类型推断
- 9.x - 小结与测试 - 引用和指针
10. 复合类型-枚举和结构体
- 10.1 - 程序定义类型简介
- 10.2 - 无作用域枚举类型
- 10.3 - 限定作用域枚举类型的输入输出
- 10.4 - 限定作用域枚举(枚举类)
- 10.5 - 结构体、成员和成员选择
- 10.6 - 结构体的聚合初始化
- 10.7 - 默认成员初始化
- 10.8 - 结构体传递及其他
- 10.9 - 基于指针和引用的成员选择
- 10.10 - 类模板
- 10.11 - 类模板参数推断CTAD
- 10.x - 小结与测试 - 枚举和结构体
- 10.y - 学会使用C++参考手册
11. 数组,字符串和动态内存分配
- 11.1 - 数组(第一部分)
- 11.2 - 数组(第二部分)
- 11.3 - 数组和循环
- 11.4 - 数组排序之选择排序
- 11.5 - 多维数组
- 11.6 - C 语言风格字符串
- 11.7 - std::string_view(第二部分)
- 11.8 - 指针和数组
- 11.9 - 指针运算和数组索引
- 11.10 - C 风格字符串符号常量
- 11.11 - 使用 new 和 delete 进行动态内存分配
- 11.12 - 动态分配数组
- 11.13 - for-each 循环
- 11.14 - void 指针
- 11.15 - 指向指针的指针和多维数组
- 11.16 - 固定数组 std::array 简介
- 11.17 - 动态数组 std::vector 简介
- 11.18 - 迭代器简介
- 11.19 - 标准库算法简介
- 11.x - 小结与测试 - 数组、字符串和动态分配
12. 函数
- 12.1 - 函数指针
- 12.2 - 栈和堆
- 12.3 - std::vector的容量和类栈行为
- 12.4 - 递归
- 12.5 - 命令行参数
- 12.6 - 省略号以及为什么要避免使用它
- 12.7 - lambda表达式简介
- 12.8 - lambda 闭包
- 12.x - 小结与测试 - 函数
13. 面向对象编程基础
- 13.1 - 欢迎来到面向对象的世界
- 13.2 - 类和类成员
- 13.3 - 访问修饰符 public 和 private
- 13.4 - 成员访问函数与封装
- 13.5 - 构造函数
- 13.6 - 构造函数成员初始化值列表
- 13.7 - 非静态成员初始化
- 13.8 - 重叠和委派构造函数
- 13.9 - 析构函数
- 13.10 - 隐藏的this指针
- 13.11 - 类代码和头文件
- 13.12 - const 对象和成员函数
- 13.13 - 静态成员变量
- 13.14 - 静态成员函数
- 13.15 - 友元函数和友元类
- 13.16 - 匿名对象
- 13.17 - 类中的嵌套类型
- 13.18 - 对程序进行计时
- 13.x - 小结与测试 - 面向对象基础
14. 操作符重载 🚧
- 14.1 - 运算符重载简介
- 14.2 - 使用友元重载算数运算符
- 14.3 - 使用普通函数重载运算符
- 14.4 - 重载输入输出运算符
- 14.5 - 使用成员函数重载运算符
- 14.6 - 重载一元运算符+,- 和 !
- 14.7 - 重载比较运算符
- 14.8 - 重载递增递减运算符
- 14.9 - 重载下标运算符
- 14.10 - 重载括号运算符
- 14.11 - 重载类型转换操作符
- 14.x - 小结与测试 - 运算符重载
16. 对象关系简介
- 16.1 - 对象关系
- 16.2 - 组合关系
- 16.3 - 聚合关系
- 16.4 - 关联关系
- 16.5 - 依赖关系
- 16.6 - 容器类
- 16.7 - std::initializer_list
- 16.x - 小结与测试 - 对象关系
17. 继承
- 17.1 - 继承简介
- 17.2 - C++继承基础
- 17.3 - 派生类的构造顺序
- 17.4 - 派生类的构造和初始化
- 17.5 - 继承和访问说明符
- 17.6 - 为派生类添加新功能
- 17.7 - 调用继承函数和重写
- 17.8 - 隐藏继承的函数
- 17.9 - 多重继承
- 17.x - 小结与测试 - 继承
18. 虚函数
- 18.1 - 基类的指针和引用
- 18.2 - 虚函数和多态
- 18.3 - override、final标识符以及协变返回类型
- 18.4 - 虚构造函数、虚赋值和重载虚拟化
- 18.5 - 早期绑定和后期绑定
- 18.6 - 虚函数表
- 18.7 - 纯虚函数,抽象基类和接类
- 18.8 - 虚基类
- 18.9 - 对象切片
- 18.10 - 动态类型转换
- 18.11 - 使用<<运算符打印继承类
- 18.x - 小结与测试 - 虚函数
19. 模板和类 🚧
20. 异常 🚧
M. move 和智能指针
- M.1 - 智能指针和移动语义简介
- M.2 - 右值引用
- M.3 - 移动构造函数和移动赋值
- M.4 - std::move
- M.5 - std::move_if_noexcept
- M.6 — std::unique_ptr
- M.7 — std::shared_ptr
- M.8 — 智能指针带来的循环依赖问题
- M.x - 小结与测试 - 移动和智能指针
21. STL
22. std 字符串
- 22.1 - std::string 和 std::wstring
- 22.2 - std-string 的构造和析构
- 22.3 - std-string 的长度和容量
- 22.4 - std-string 字符访问和C字符数组转换
- 22.5 - std-string 赋值和交换
- 22.6 - std-string 追加
- 22.7 - std-string 插入
23. 输入输出
- 23.1 - 输入输出流
- 23.2 - 使用istream处理输入
- 23.3 - 使用ostream和ios处理输出
- 23.4 - 用于字符串的 stream 类
- 23.5 - 流状态和输入验证
- 23.6 - 基本文件输入输出
- 23.7 - 随机文件输入输出