83620c0cf5
- docs/teaching/OUTLINE.md、slides/day1-5.html、index.html:替换此前自定义的 4 天方案,严格对齐 docs/TRAINING_PLAN_2026.md「C++方向」Day1-5 课堂内容 (Day6-10 为纯项目实作,不在教案范围) - docs/teaching/examples/:官方方案书要求但仓库 p03/(wiki 抓取内容) 未覆盖的 QSS/Model-View/JSON/QThread/QPropertyAnimation/QStateMachine 六个技术点, 各补一个最小可运行示例 + README 教学文档,均已离屏验证跑通;手工维护, 不属于 gen_part3.py 生成产物 - 根 CMakeLists.txt:接入 docs/teaching/examples 构建(BUILD_QT_PART 分支内), 不改动生成器管理的 p01/p03 CMakeLists - 任务卡改为目标/验收标准/基础知识参考三段式模板,custom.css 配套新增样式 - docs/teaching/PRETEST.md:10 题 10 分钟 C++ 摸底测验,验证教案假定的受众 基础是否成立,并与 OUTLINE.md §0 的分层预案挂钩
256 lines
12 KiB
HTML
256 lines
12 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh-CN">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<title>Day 1 · 开训 + C++ 回顾/工具链</title>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<link rel="stylesheet" href="reveal/reveal.css">
|
||
<link rel="stylesheet" href="reveal/theme.css">
|
||
<link rel="stylesheet" href="reveal/plugin/highlight/monokai.css">
|
||
<link rel="stylesheet" href="custom.css">
|
||
</head>
|
||
<body>
|
||
<div class="reveal">
|
||
<div class="slides">
|
||
|
||
<section>
|
||
<h1>Day 1</h1>
|
||
<h3>开训 + C++ 回顾/工具链</h3>
|
||
<p class="module-badge">C++/Qt 方向实训 · 第 1 / 5 天 · 对齐官方方案书 Day1</p>
|
||
<ul>
|
||
<li>模块 A(3 课时):团队建设 / 敏捷 Scrum / C++ 在企业中的应用(讨论型,无编码)</li>
|
||
<li>模块 B(3 课时):C++ 环境搭建 / 高级程序回顾 / CMake / Vcpkg(压缩讲解)</li>
|
||
</ul>
|
||
<p><small>本教案假定学员已掌握 C++ 基础语法与 OOP 概念——方案书对今天下午的
|
||
官方定位是"回顾和提升",不是零基础教学。今天开始的 5 天覆盖方案书 C++方向
|
||
Day1–5 全部课堂内容,Day6–10 是纯项目实作。</small></p>
|
||
<div class="verify-box" style="font-size:0.5em;">
|
||
<h4>模块 B 开始前:10 分钟摸底测验</h4>
|
||
<p>这条假设不是拍脑袋定的——建议模块 B 讲授前先用
|
||
<a class="filelink" target="_blank" href="../PRETEST.md">docs/teaching/PRETEST.md</a>
|
||
(10 题、10 分钟)实测一次,按结果决定原节奏推进还是回退到语法讲解。</p>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ===================== 模块 A:讲 ===================== -->
|
||
<section>
|
||
<section>
|
||
<p class="module-badge">模块 A · 讲授 35min</p>
|
||
<h2>团队建设 / 敏捷 Scrum / C++ 企业应用 <span class="tag tag-lecture">讲</span></h2>
|
||
<ul>
|
||
<li>团队建设与文化、实训安排与考评要求</li>
|
||
<li>项目开发过程管理全景(JIRA / Git / OASIS / Wiki)</li>
|
||
<li>敏捷 Scrum 项目开发管理</li>
|
||
<li>C++ 在企业中的应用</li>
|
||
</ul>
|
||
</section>
|
||
|
||
<section>
|
||
<h3>实习实训服务流程 <span class="tag tag-lecture">讲</span></h3>
|
||
<img src="../../images/training_service_flow.png" style="max-height:480px;">
|
||
<p><small>出处:<a class="filelink" target="_blank"
|
||
href="../../TRAINING_PLAN_2026.md">docs/TRAINING_PLAN_2026.md</a>
|
||
「六、实习实训服务流程」——需求分析→需求评审→项目研发/代码实现→阶段评审→
|
||
项目测试/交付,这就是接下来 Day6–10 项目实作要走的完整流程。</small></p>
|
||
</section>
|
||
|
||
<section>
|
||
<h3>质量保证:四平台一标准 <span class="tag tag-lecture">讲</span></h3>
|
||
<img src="../../images/quality_four_platforms.png" style="max-height:420px;">
|
||
<p><small>出处:<a class="filelink" target="_blank"
|
||
href="../../TRAINING_PLAN_2026.md">docs/TRAINING_PLAN_2026.md</a>
|
||
「七、质量保证」——JIRA(任务跟踪)+ Git(版本管理)+ Wiki 知识库 +
|
||
OASIS 绿洲实训管理平台,是接下来项目实作阶段的四个协作工具。</small></p>
|
||
</section>
|
||
</section>
|
||
|
||
<!-- ===================== 模块 A:讨论(无编码) ===================== -->
|
||
<section>
|
||
<section>
|
||
<p class="module-badge">模块 A · 讨论 95min(分组,非编码)</p>
|
||
<h2>动手:分组讨论 <span class="tag tag-discuss">议</span></h2>
|
||
<p><small>今天上午没有编码练习——先把协作流程和项目方向定下来,Day6–10
|
||
的项目实作会真的用到今天讨论的结论。</small></p>
|
||
</section>
|
||
<section>
|
||
<div class="task-card discuss-card">
|
||
<h4>任务卡 1 · 协作分工 <span class="tag tag-discuss">议</span></h4>
|
||
<dl class="task-spec">
|
||
<dt>目标</dt>
|
||
<dd>结合服务流程图,说清楚本组打算怎么分工使用 Jira(任务跟踪)+ Git(代码版本管理)</dd>
|
||
<dt>验收标准</dt>
|
||
<dd>每组提交一句话分工说明(谁负责建 Jira 看板 / 谁负责 Git 仓库初始化),能在图上指出对应环节</dd>
|
||
<dt>基础知识 · 参考</dt>
|
||
<dd>上一节"实习实训服务流程"图 ·
|
||
<a class="filelink" target="_blank" href="../../TRAINING_PLAN_2026.md">TRAINING_PLAN_2026.md 「七、质量保证 (一)(二)」</a></dd>
|
||
</dl>
|
||
</div>
|
||
</section>
|
||
<section>
|
||
<div class="task-card discuss-card">
|
||
<h4>任务卡 2 · 选定项目方向 <span class="tag tag-discuss">议</span></h4>
|
||
<dl class="task-spec">
|
||
<dt>目标</dt>
|
||
<dd>选定实训期间打算做的项目方向(Linux C 方向,或 C++/Qt 方向的备选商业项目之一)</dd>
|
||
<dt>验收标准</dt>
|
||
<dd>每组报出项目名称 + 一句话说明选择理由</dd>
|
||
<dt>基础知识 · 参考</dt>
|
||
<dd><a class="filelink" target="_blank" href="../../TRAINING_PLAN_2026.md">TRAINING_PLAN_2026.md 「八、备选商业项目介绍」</a></dd>
|
||
</dl>
|
||
</div>
|
||
</section>
|
||
</section>
|
||
|
||
<!-- ===================== 模块 B:讲 ===================== -->
|
||
<section>
|
||
<section>
|
||
<p class="module-badge">模块 B · 讲授 35min(巡礼式,压缩讲解)</p>
|
||
<h2>C++ 回顾 / CMake / Vcpkg <span class="tag tag-lecture">讲</span></h2>
|
||
<p><small>只挑「学过但容易讲不透」的点,不逐章展开——方案书官方定位是
|
||
"回顾和提升",深度让位于 Day2–5 的 Qt 内容。</small></p>
|
||
</section>
|
||
|
||
<section>
|
||
<h3>namespace 作用域 <span class="tag tag-lecture">讲</span></h3>
|
||
<p>"作用域"不是"文件顺序"——很多人误以为 namespace 只是给名字加前缀,
|
||
实际上它定义的是一段可以被跨文件延续、跨块合并的作用域。</p>
|
||
<p><small>出处:<a class="filelink" target="_blank"
|
||
href="../../../p01/ch03/namespace_syntax.cpp">p01/ch03/namespace_syntax.cpp</a>,
|
||
对照 <a class="filelink" target="_blank" href="../../ERRATA.md">docs/ERRATA.md</a></small></p>
|
||
</section>
|
||
|
||
<section>
|
||
<h3>函数重载决议 <span class="tag tag-lecture">讲</span></h3>
|
||
<p>编译器靠"名字改写"(name mangling)把重载函数变成不同的符号;二义性
|
||
往往不是代码写错了,而是重载集合里存在两个"一样好"的候选。</p>
|
||
<p><small>出处:<a class="filelink" target="_blank"
|
||
href="../../../p01/ch03/function_overload_mechanism.cpp">p01/ch03/function_overload_mechanism.cpp</a></small></p>
|
||
</section>
|
||
|
||
<section>
|
||
<h3>引用的本质 <span class="tag tag-lecture">讲</span></h3>
|
||
<p>把引用理解成"自动解引用的 const 指针"——这个实现视角能解释引用为什么
|
||
必须初始化、为什么不能重新绑定。</p>
|
||
<p><small>出处:<a class="filelink" target="_blank"
|
||
href="../../../p01/ch03/reference_essence.cpp">p01/ch03/reference_essence.cpp</a></small></p>
|
||
</section>
|
||
|
||
<section>
|
||
<h3>虚析构与内存泄漏 <span class="tag tag-lecture">讲</span></h3>
|
||
<pre><code class="cpp" data-trim data-noescape>
|
||
Base* p = new Derived();
|
||
delete p; // 如果 ~Base() 不是 virtual,~Derived() 不会被调用——经典泄漏
|
||
</code></pre>
|
||
<p><small>出处:<a class="filelink" target="_blank"
|
||
href="../../../p01/ch04/s08/virtual_dtor_purpose.cpp">p01/ch04/s08/virtual_dtor_purpose.cpp</a></small></p>
|
||
</section>
|
||
|
||
<section>
|
||
<h3>模板与 STL 速览 <span class="tag tag-lecture">讲</span></h3>
|
||
<p>只点名,不展开:泛型编程(函数模板/类模板)+ 容器/迭代器,是 Day6–10
|
||
项目实作里会大量用到的基础设施。</p>
|
||
<p><small>出处:<a class="filelink" target="_blank"
|
||
href="../../../p01/ch05/class_template_basics.cpp">p01/ch05/class_template_basics.cpp</a>、
|
||
<a class="filelink" target="_blank" href="../../../p01/ch09/s03/vector_iterator.cpp">p01/ch09/s03/vector_iterator.cpp</a></small></p>
|
||
</section>
|
||
|
||
<section>
|
||
<h3>CMake:用本仓库当教材 <span class="tag tag-lecture">讲</span></h3>
|
||
<pre><code class="bash" data-trim>cmake -S . -B build -G Ninja -DBUILD_QT_PART=OFF -DCMAKE_BUILD_TYPE=Debug
|
||
cmake --build build # 144 个目标全绿</code></pre>
|
||
<p><small>出处:仓库根 <a class="filelink" target="_blank" href="../../../CMakeLists.txt">CMakeLists.txt</a>——
|
||
<code>option(BUILD_QT_PART)</code> 控制是否编译 Qt 部分,每个示例一个
|
||
<code>add_executable</code> 目标,这就是"一文件一目标"约定的由来。</small></p>
|
||
</section>
|
||
|
||
<section>
|
||
<h3>Vcpkg 包管理器(概念,无演示) <span class="tag tag-lecture">讲</span></h3>
|
||
<p>C++ 生态的包管理器,解决"第三方库怎么装、怎么被 CMake 找到"的问题。</p>
|
||
<div class="verify-box">
|
||
<h4>缺口说明</h4>
|
||
<p>本仓库用的是"隔离 Qt 手动装"(<code>tools/install_qt_host.sh</code>)
|
||
而非 vcpkg,两种思路都要认识;本仓库暂无 vcpkg 可运行示例——安装真实
|
||
vcpkg 工具链超出最小示例范畴,此处仅作概念介绍。</p>
|
||
</div>
|
||
</section>
|
||
</section>
|
||
|
||
<!-- ===================== 模块 B:练 ===================== -->
|
||
<section>
|
||
<section>
|
||
<p class="module-badge">模块 B · 练习 95min</p>
|
||
<h2>动手:走一遍真实构建流程 <span class="tag tag-practice">练</span></h2>
|
||
</section>
|
||
<section>
|
||
<div class="task-card">
|
||
<h4>任务卡 1 · 走一遍真实构建流程 <span class="tag tag-practice">练</span></h4>
|
||
<dl class="task-spec">
|
||
<dt>目标</dt>
|
||
<dd>独立完成本仓库 Part1 的配置+构建,不看着教师操作</dd>
|
||
<dt>验收标准</dt>
|
||
<dd><code>cmake -S . -B build -G Ninja -DBUILD_QT_PART=OFF</code> 配置成功;
|
||
<code>cmake --build build</code> 144 个目标全绿;能说出 <code>option(BUILD_QT_PART)</code> 的作用</dd>
|
||
<dt>基础知识 · 参考</dt>
|
||
<dd><a class="filelink" target="_blank" href="../../../CMakeLists.txt">仓库根 CMakeLists.txt</a> ·
|
||
<span class="ext-ref">CMake 官方文档 Tutorial(选读·需联网)</span></dd>
|
||
</dl>
|
||
</div>
|
||
</section>
|
||
<section>
|
||
<div class="task-card">
|
||
<h4>任务卡 2 · 修一个真实的坑 <span class="tag tag-practice">练</span></h4>
|
||
<dl class="task-spec">
|
||
<dt>目标</dt>
|
||
<dd>从 <a class="filelink" target="_blank" href="../../ERRATA.md">docs/ERRATA.md</a>
|
||
挑 2 条记录,理解"wiki 原文错在哪、现在的写法为什么对"</dd>
|
||
<dt>验收标准</dt>
|
||
<dd>能用一句话向同组同学解释清楚,不能只念代码</dd>
|
||
<dt>基础知识 · 参考</dt>
|
||
<dd><a class="filelink" target="_blank" href="../../ERRATA.md">docs/ERRATA.md</a></dd>
|
||
</dl>
|
||
</div>
|
||
</section>
|
||
<section>
|
||
<div class="task-card">
|
||
<h4>任务卡 3(选做)· 版本探针 <span class="tag tag-practice">练</span></h4>
|
||
<dl class="task-spec">
|
||
<dt>目标</dt>
|
||
<dd>用 <code>tools/std_probe.py</code> 验证一个标准版本差异点(如三目运算符可否作左值)</dd>
|
||
<dt>验收标准</dt>
|
||
<dd>跑出至少一个"该标准报错、另一个标准不报错"的对比结果,对照
|
||
<a class="filelink" target="_blank" href="../../VERSION_NOTES.md">docs/VERSION_NOTES.md</a> §2</dd>
|
||
<dt>基础知识 · 参考</dt>
|
||
<dd><a class="filelink" target="_blank" href="../../../tools/std_probe.py">tools/std_probe.py</a> ·
|
||
<a class="filelink" target="_blank" href="../../VERSION_NOTES.md">docs/VERSION_NOTES.md</a></dd>
|
||
</dl>
|
||
</div>
|
||
</section>
|
||
</section>
|
||
|
||
<!-- ===================== 收尾 ===================== -->
|
||
<section>
|
||
<h2>当日产出验证</h2>
|
||
<div class="verify-box">
|
||
<h4>验收</h4>
|
||
<pre><code class="bash" data-trim>cmake --build build --target all # Part1,144 个目标全绿</code></pre>
|
||
<p>每组提交一句话分工说明 + 至少 1 条 ERRATA 坑点讲解。</p>
|
||
</div>
|
||
<p class="footer-note"><small>明天 Day2 进入 Qt:项目结构 / 信号槽 / 控件 / 布局与 QSS ——
|
||
大纲:<a class="filelink" href="../OUTLINE.md">docs/teaching/OUTLINE.md</a></small></p>
|
||
<p><a class="filelink" href="index.html">返回目录</a> · <a class="filelink" href="day2.html">下一天 →</a></p>
|
||
</section>
|
||
|
||
</div>
|
||
</div>
|
||
|
||
<script src="reveal/reveal.js"></script>
|
||
<script src="reveal/plugin/highlight/highlight.js"></script>
|
||
<script>
|
||
Reveal.initialize({
|
||
hash: true, controls: true, progress: true, center: true, slideNumber: true,
|
||
plugins: [ RevealHighlight ]
|
||
});
|
||
</script>
|
||
</body>
|
||
</html>
|