C++ 在 C 的基础上引入了面向对象、泛型编程和强大的标准库。这套笔记按课程顺序整理,内容覆盖 C++ 入门、面向对象、内存管理、模板和 STL 容器,目标是建立可持续扩展的 C++ 知识结构。
学习路线
1 | C++ 基础 |
建议先掌握语言基础和类的基本使用,再学习对象生命周期、资源管理和模板。完成 STL 容器部分后,应重点练习”能用、明理、能扩展”三个层次:先会使用接口,再理解底层结构,最后尝试实现或扩展组件。
课程目录
| 编号 | 课件 | 核心内容 |
|---|---|---|
| 001 | C++ 入门基础 | C++ 发展历史、标准版本、课程结构和参考资料 |
| 002 | 类和对象(上) | 类的定义、成员函数、访问限定符、封装和对象基础 |
| 003 | 类和对象(中) | 默认成员函数、构造函数、析构函数、拷贝构造和赋值 |
| 004 | 类和对象(下) | 初始化列表、隐式类型转换、static 成员、友元和内部类 |
| 005 | 内存管理 | C/C++ 内存分布、动态内存、malloc/free 与 new/delete |
| 006 | 模板初阶 | 泛型编程、函数模板、类模板和模板参数 |
| 007 | STL 简介 | STL 组成、六大组件、学习方法和实际价值 |
| 008 | string | std::string、常用接口、迭代器、范围 for 和 auto |
| 009 | vector | 构造、迭代器、容量、空间管理、增删改查和常见接口 |
| 010 | list | 双向链表容器、迭代器、容量、元素访问和插入删除 |
| 011 | stack 和 queue | 栈、队列、适配器、最小栈、表达式求值和序列问题 |
| 012 | 模板进阶 | 非类型模板参数、模板特化、偏特化和参数匹配 |
知识重点
类和对象
- 使用
class定义数据和行为,理解封装、访问控制和成员函数; - 掌握构造函数、析构函数、拷贝构造和赋值运算符;
- 理解编译器生成的默认成员函数,以及何时需要手动实现;
- 使用初始化列表正确初始化引用、
const成员和没有默认构造函数的成员对象。
内存管理
- 区分栈、堆、静态区、常量区和代码区;
- 理解动态内存分配、释放和扩容;
- 区分 C 风格的
malloc/free与 C++ 风格的new/delete; - 关注内存泄漏、悬空指针、重复释放和越界访问等问题。
模板与泛型编程
- 使用函数模板和类模板编写类型无关的代码;
- 理解模板实例化和参数推导,学习非类型模板参数、模板特化和偏特化;
- 在复用性、可读性和编译复杂度之间进行权衡。
STL 与容器
- 理解容器、迭代器、算法和函数对象等 STL 组件之间的关系;
- 掌握
string的字符串管理,理解vector的连续存储、size、capacity、resize和reserve; - 理解
list的节点结构、迭代器和插入删除特点; - 使用
stack和queue解决后进先出、先进先出等问题。
通用编译方式
仓库当前以课件资料为主。如果添加 .cpp 示例,可以使用支持 C++11 或更高标准的编译器:
1 | g++ -std=c++11 -Wall -Wextra -Wpedantic example.cpp -o example |
对于使用较新语言特性的代码,可以将标准切换为 -std=c++17。
后续扩展方向
- 为每个章节增加独立的
.cpp示例与 CMake 构建配置; - 增加单元测试和容器操作实验;
- 增加复杂度、迭代器失效和异常安全笔记;
- 补充现代 C++ 内容:智能指针、移动语义、lambda、并发和 ranges。