C++/Qt 方向实训 · 第 1 / 4 个讲授日 · 对齐 2026-07 新版 10 天安排
本教案假定学员已掌握 C++ 基础语法与 OOP 概念——今天定位是"回顾和提升", 不是零基础教学。Day1–4 讲授,Day5 综合案例,Day6–10 项目开发与答辩。 大纲:docs/teaching/OUTLINE_4DAY.md
受众假设要实测——用 docs/teaching/PRETEST.md (10 题、10 分钟、A/B 平行卷)测一次,按结果决定回顾环节推进速度(分层预案见该文件)。
上午 · 讲授 08:30–11:00(讲 25–30min + 随堂练 10–15min 循环)
cmake -S . -B build -G Ninja -DBUILD_QT_PART=OFF -DCMAKE_BUILD_TYPE=Debug
cmake --build build # 144 个目标全绿
cmake -S -B 读
CMakeLists.txt 生成 Ninja/Makefile 工程(Makefile 是它的生成目标之一——
这就是两者的关系),cmake --build 才是真正编译。
option(BUILD_QT_PART) 控制是否编译 Qt 部分,每个示例一个
add_executable 目标。CMakeLists.txt 却没重新配置:大多数改动 CMake 会自动侦测,
但换生成器/清缓存后需要重新走一次 -S -B。出处:仓库根 CMakeLists.txt
· 包管理器一分钟:vcpkg 用 toolchain 文件让 find_package 自动找到三方库;
本仓库选"隔离 Qt 手动装",两种思路都要认识。
main.cpp:12:5: error: 'foo' was not declared ← 编译期:带文件行号
main.o: undefined reference to `Widget::bar()' ← 链接期:没有行号
error: 带行号 = 编译期问题(语法/类型/没声明)——回代码里查那一行;
undefined reference 无行号 = 链接期问题(有声明没定义/缺库/缺目标文件)——
查"定义在哪、链没链进来",回头检查语法是南辕北辙。undefined reference 的第一反应是检查拼写和语法——方向就错了。
明天 Qt 的"忘写 Q_OBJECT"报的正是链接错误,且报错完全不提宏,记住今天这页。using namespace std; 会把命名空间污染带给所有 include 它的
地方——只在 .cpp 用,或全程写限定名。出处:p01/ch04/(类与对象各节)、 p01/ch03/namespace_syntax.cpp, 对照 docs/ERRATA.md
上午 · 课堂练习 11:00–12:00(工程师指导、答疑)
cmake -S . -B build -G Ninja -DBUILD_QT_PART=OFF 配置成功;
cmake --build build 144 个目标全绿;能说出 option(BUILD_QT_PART) 的作用下午 · 讲授 13:30–16:00
long 进去可能触发意料之外的重载版本。
Base* p = new Derived();
delete p; // 如果 ~Base() 不是 virtual,~Derived() 不会被调用——经典泄漏
delete 派生类对象时,只有基类析构是 virtual
才会走虚函数表找到派生类析构——"多态"在析构场景下的具体体现。virtual——防御性约定。
(明天会看到 Qt 的 QObject 体系全线虚析构。)unique_ptr 独占所有权、shared_ptr
共享所有权(详见 MODERN_CPP.md §2)。
一个对象只能有一个所有者。vector/map/string
是项目实作三件套;迭代器是"容器和算法之间的统一接口"——STL 算法能脱离具体容器复用的关键。vector 扩容搬家),继续用是
未定义行为——遍历中增删元素前先弄清该容器的失效规则。出处:p01/ch05/class_template_basics.cpp、 p01/ch09/s03/vector_iterator.cpp
make_unique;tools/std_probe.py
自己验证某特性从哪个标准开始能编译(宿主 gcc 13.3 支持到 C++23)。自学入口:MODERN_CPP.md(11/14/17, 示例全部可在本仓库基线下编译) · MODERN_CPP_20PLUS.md(20/23/26 前瞻, 含本机 GCC 实测矩阵)
下午 · 课堂作业 16:00–17:00(工程师答疑)
tools/std_probe.py 验证一个标准版本差异点cmake --build build --target all # Part1,144 个目标全绿
每人完成构建全绿 + 2 条 ERRATA 坑点讲解;PRETEST 结果已归档(决定后续调速)。
明天 Day2 进入 Qt:概述 / 创建项目 / 第一个程序 / 信号槽 → 计算器 —— 大纲:docs/teaching/OUTLINE_4DAY.md