C++/Qt 方向实训 · 第 1 / 5 天 · 对齐官方方案书 Day1
本教案假定学员已掌握 C++ 基础语法与 OOP 概念——方案书对今天下午的 官方定位是"回顾和提升",不是零基础教学。今天开始的 5 天覆盖方案书 C++方向 Day1–5 全部课堂内容,Day6–10 是纯项目实作。
这条假设不是拍脑袋定的——建议模块 B 讲授前先用 docs/teaching/PRETEST.md (10 题、10 分钟)实测一次,按结果决定原节奏推进还是回退到语法讲解。
模块 A · 讲授 35min
出处:docs/TRAINING_PLAN_2026.md 「六、实习实训服务流程」
出处:docs/TRAINING_PLAN_2026.md 「七、质量保证」
模块 A · 讨论 95min(分组,非编码)
今天上午没有编码练习——先把协作流程和项目方向定下来,Day6–10 的项目实作会真的用到今天讨论的结论。
模块 B · 讲授 35min(巡礼式,压缩讲解)
只挑「学过但容易讲不透」的点,不逐章展开——方案书官方定位是 "回顾和提升",深度让位于 Day2–5 的 Qt 内容。
using namespace std;:会把整个命名空间污染带给所有
include 这个头文件的地方,容易引发命名冲突,规范做法是只在 .cpp 里用,或干脆不用、
全程写限定名。int/double 都能转
float 参数,传一个 long 进去可能触发意料之外的重载版本。
Base* p = new Derived();
delete p; // 如果 ~Base() 不是 virtual,~Derived() 不会被调用——经典泄漏
delete 派生类对象时,只有基类析构函数是 virtual
才会走虚函数表找到派生类的析构函数——这是"多态"在析构这个场景下的具体体现。virtual——即使当前基类本身没什么要清理的,这是个防御性约定。vector 扩容),
继续用失效的迭代器是未定义行为——遍历中增删元素前要先弄清对应容器的迭代器失效规则。出处:p01/ch05/class_template_basics.cpp、 p01/ch09/s03/vector_iterator.cpp
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 工程,cmake --build 才是
真正编译。option(BUILD_QT_PART) 控制是否编译 Qt 部分,每个示例一个
add_executable 目标,这就是"一文件一目标"约定的由来。CMakeLists.txt 却没重新 cmake 配置(只 build):
大多数改动 CMake 会自动侦测重新配置,但换了生成器/清了缓存等情况需要重新走
-S -B 一次。出处:仓库根 CMakeLists.txt
vcpkg install,配合 CMake 的 toolchain 文件,find_package
就能自动找到头文件和库。tools/install_qt_host.sh)而非 vcpkg,两种思路都要认识:包管理器省心但
引入额外工具链,手动隔离装则精确控制版本/路径,各有取舍。本仓库暂无 vcpkg 可运行示例——安装真实 vcpkg 工具链超出最小示例范畴,此处仅作概念介绍。
模块 B · 练习 95min
cmake -S . -B build -G Ninja -DBUILD_QT_PART=OFF 配置成功;
cmake --build build 144 个目标全绿;能说出 option(BUILD_QT_PART) 的作用tools/std_probe.py 验证一个标准版本差异点(如三目运算符可否作左值)cmake --build build --target all # Part1,144 个目标全绿
每组提交一句话分工说明 + 至少 1 条 ERRATA 坑点讲解。
明天 Day2 进入 Qt:项目结构 / 信号槽 / 控件 / 布局与 QSS —— 大纲:docs/teaching/OUTLINE.md