C++ learning path

青少年 C++ 编程课程

适合希望系统学习编程的海外华人和国内学生。从变量、内存和面向对象出发,逐步进入命令行交互、STL、基础算法、数据结构与综合项目。

Learning roadmap

一条从“看懂地址”到“独立完成项目”的学习路线。

C++ 的难点不在记语法,而在理解数据、控制流程、对象关系和算法选择。整套课程用 20 课从内存与对象基础,逐步走到可保存数据的命令行综合项目。

第 1 课变量、地址、*p、&x
第 2 课函数、数组、new/delete
第 3 课野指针、内存泄漏、智能指针
第 4 课class、object、封装、构造函数
第 5-7 课继承、组合、多态、OOP 项目实战
第 8-14 课命令行交互、函数、STL、排序与查找
第 15-20 课数据结构、递归、文件读写与结课项目
C++ 数组和内存地址的可视化学习插图
课程用统一图解把变量、地址、数组和内存管理串成一条线。

All C++ lessons

二十节 C++ 课,从地址走到独立项目。

C++ 指针入门课变量盒子插图
01 Beginner

C++ 指针入门课

用“盒子、地址、门牌号”的方式理解变量、地址、指针、*p&x

  • 变量与地址
  • 用指针访问和修改变量
  • 金币加倍小程序与练习题
进入第 1 课
C++ 指针中级课函数传参插图
02 Intermediate

C++ 指针中级课程

从“保存地址”进入真正应用:函数传参、交换变量、指针与数组、动态内存、nullptr 和二级指针。

  • 指针传参和 swap
  • 数组首地址与指针运算
  • new/delete 与动态数组
进入第 2 课
C++ 指针高级课 unique_ptr 插图
03 Advanced

C++ 指针高级教程

进入现代 C++ 实战:避免野指针、内存泄漏和返回无效地址,学习引用、函数指针、智能指针与 RAII。

  • 内存风险与安全写法
  • unique_ptr / shared_ptr / weak_ptr
  • 对象指针与现代最佳实践
进入第 3 课
C++ 类与对象入门课程图解
04 OOP

C++ 类与对象入门

承接对象指针,学习 class、对象实例、private/public 封装、构造函数、this 指针和学生成绩册小项目。

  • 类是蓝图,对象是作品
  • 封装、构造函数和 this 指针
  • vector<Student> 小项目练习
进入第 4 课
C++ 继承与组合课程图解
05 Inheritance

C++ 继承与组合

PersonStudentTeacher 开始,理解父类、子类、protected、构造顺序,以及 is-a / has-a。

  • base class 与 derived class
  • protected 与父类构造函数
  • 继承和组合的建模判断
进入第 5 课
C++ 多态与虚函数课程图解
06 Polymorphism

C++ 多态与虚函数

virtualoverride、父类指针和抽象类,让同一段代码根据真实对象运行不同方法。

  • virtual / override
  • 抽象类、纯虚函数和虚析构
  • vector<unique_ptr<Shape>>
进入第 6 课
C++ 面向对象项目实战课程图解
07 Project

C++ 面向对象项目实战

把封装、继承、多态、智能指针和文件拆分组合成一个小型 RPG 战斗系统,练习从类图到代码。

  • Character / Player / Monster
  • .h / .cpp 文件拆分
  • 战斗循环、测试和重构
进入第 7 课
C++ 第 8 到 20 课算法、数据结构和命令行综合项目
08-20 Algorithms & Data Structures

C++ 命令行程序、算法与数据结构

从安全输入、判断、循环和函数开始,学习字符串、STL 容器、排序查找、栈、队列、映射、链表、递归和文件读写。

  • 每课包含课堂案例、算法训练和课后作业
  • 掌握常用容器与基础时间复杂度
  • 完成可保存数据的命令行结课项目
查看第 6-20 课完整大纲

What you will build

学完之后,要能独立设计、实现和测试 C++ 命令行程序。

  1. 建模类与对象class Student
  2. 交互命令行菜单getline(cin, cmd)
  3. 处理STL 容器vector / map
  4. 选择基础算法sort / search
  5. 完成综合项目save / load / test

Start here

建议从第 1 课开始,按顺序完成二十节课。

int* p = &x; void swap(int* a,int* b) auto p = make_unique<Person>(); class Student { ... }; virtual void draw()