将 raw/ 中的 Markdown 学习笔记转化为可编译、通过 linter 检查的示例代码。
有机整合,不要割裂。 一个文档的多个知识点应该融入同一段代码,而非每个知识点单独写一个示例。
反例(割裂):
// 知识点1:封装
class A { public: int x; };
// 知识点2:继承
class B : public A {};
// 知识点3:多态
// ...又一个独立的类
正例(整合):
// 一个 Vehicle 继承体系,同时覆盖封装、构造析构、深拷贝、继承、多态
class Vehicle { ... };
class Car : public Vehicle { ... };
class Truck final : public Vehicle { ... };
读取目标 .md 文件,通读全部知识点。
从笔记中提炼出所有需要演示的知识点,按主题分组。
根据语言特性和知识点类型选择组织方式:
OOP 语言(C++、Java、C# 等):用 2~3 个有继承关系的类,让父类承载大部分知识点,子类演示扩展和多态。
过程式语言(C 等无类语言):按功能模块组织,一个 .c 文件覆盖多个知识点,用函数分组,用注释标注知识点编号。
算法示例:一个完整的算法实现(如排序、查找、链表操作),在实现过程中自然覆盖该文档的所有知识点。
设计目标:
注释中用 1. 2. 3. 等简单编号标注每个知识点对应的代码位置,便于查阅。
使用项目根目录下的 linter 配置文件:
# C++
clang-tidy "文件路径" -p "项目根目录" -- -std=c++17
# C
clang-tidy "文件路径" -p "项目根目录" -- -std=c11
# Python
ruff check "文件路径"
# JavaScript / TypeScript
eslint "文件路径"
# Go
golangci-lint run
重复步骤 4-6,直到 linter 只报告外部依赖的警告,用户代码无警告。
手动确认:
++、析构时 --)| 语言 | 组织方式 | 注意事项 |
|---|---|---|
| C++ | 类继承体系 | 虚析构、Rule of Five、const 成员函数 |
| C | 按功能模块分函数组 | 结构体 + 函数指针模拟多态,static 文件作用域 |
| Java | 接口 + 抽象类 + 实现类 | 强制 Rule of Five,接口隔离 |
| Python | 基类 + 子类,或函数式 | @property、__init__、abc.ABC |
| Go | 结构体 + 方法,接口隐式实现 | 无继承,用组合替代 |
| JavaScript | 原型链或 class 语法 | class、extends、static |
| 算法 | 单文件完整实现 | 主函数演示 + 核心算法函数,注释标注复杂度 |
[[nodiscard]])按项目 linter 配置要求添加friend 等破坏封装的用法,注释中说明"谨慎使用"