编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • C语言入门精通

  • Cpp入门到精通

    • README
    • 入门教程

    • 综合案例

      • README
        • 01.定位与使用方式
        • 02.6 案例总览
        • 03.章节—案例覆盖矩阵(100% 全覆盖自检)
        • 04.推荐学习路径
          • 路径 A:新手线(按顺序通读,强烈推荐)
          • 路径 B:带 C 基础转 C++(按主题跳读)
          • 路径 C:快速查漏(按卷一章节反查)
        • 05.案例间承接关系(业务+技术双线)
        • 06.统一的写作约定
          • 6.1 每篇结构模板
          • 6.2 代码风格
          • 6.3 术语统一
        • 07.常见疑问 FAQ
        • 08.学习效果检验标准
        • 09.与其他卷的衔接
        • 10.反馈
      • 学生管理通讯录系统
      • 银行账户管理系统
      • 校园身份预约系统
      • Json与内存数据库
      • 订单票务购买系统
      • 迷你KV存储引擎器
      • 迷你编译器解释器
    • 专栏博客

    • 开发技巧

  • Java入门精通

  • Go入门到精通

  • JavaScript入门

  • CodeX
  • Cpp入门到精通
  • 综合案例
杨充
2026-05-25
目录

README

# 卷二 · 综合案例总导读(6 案例精品版)

本卷是**卷一《语法卷》**的配套实战篇。学完卷一第 2-18 章基础语法后,通过 6 个层层递进的精品案例把散落的知识点串起来,形成"能独立写项目"的能力。

其中第 6 个 MiniKVStore(迷你 KV 存储引擎) 是"集大成的毕业设计",一口气覆盖卷一全部 17 章。


# 01.定位与使用方式

本卷的每一篇都按 "照着写 · 抄得懂 · 改得动" 三个层次设计:

  1. 照着写:每个小节先给需求、再给代码片段,初学者跟着键入即可跑通——所有代码均按"小白手把手"的步骤拆解,一步一步写、一步一步测。
  2. 抄得懂:代码后必有"为什么这样写 / 关键机制原理 / 新手陷阱"小节,回答"C++ 为什么不能像 Python 那样随手写"。
  3. 改得动:每篇结尾留 3 个"延伸挑战",鼓励读者用新学的特性重构。

代码标准:以 C++17 为基线,兼容 C++20/23 新特性(会明确标注);编译器建议 GCC ≥ 10 / Clang ≥ 12 / MSVC ≥ 19.30;构建系统推荐 CMake ≥ 3.16。

学习方式:建议每个案例独立创建一个目录,跟着教程边读边写——看一段、敲一段、跑一段。完成一个案例约需 3-18 小时(按难度递增),全部 6 个案例预计 65 小时完成。


# 02.6 案例总览

本卷采用"业务连贯 + 技术演进"双主线设计:前 5 个案例围绕"校园/企业管理系统"展开,每个案例都是上一个的"自然进化";第 6 个是毕业设计,把所有能力合一。

# 案例 难度 时长 核心主题 卷一前置
01 学生通讯录系统 (opens new window) ★☆☆☆☆ 3 h C 风格起步:struct + 数组 + 函数拆分 + cin/cout 第 2-7 章
02 银行账户管理系统 (opens new window) ★★★☆☆ 8 h OOP 进化:class 封装 + 多态(普通/VIP/储蓄账户)+ CSV 持久化 第 8-10、13 章
03 校园身份预约系统 (opens new window) ★★★★☆ 10 h 抽象身份 + STL 全家桶(vector/map/multimap)+ 多模块文件矩阵 + lambda 排序 第 9-10、13、16 章
04 JSON 序列化器与内存数据库 ★★★★☆ 12 h 现代内存模型:variant + 递归 + 智能指针 + 异常体系 + optional/string_view 第 8、11-12、14、18 章
05 多线程订单系统与线程池 ★★★★★ 14 h 并发栈:thread/mutex/condition_variable/atomic/future/jthread + 策略模式 第 11-12、15-16 章
06 迷你 KV 存储引擎 🎓 ★★★★★ 18 h 毕业设计:命令模式 + AOF 持久化 + 读写锁 + jthread 后台 + 宏 + 模板 + <=> + 内置单测 第 2-18 全章

🎓 第 6 个案例是"毕业设计"——前 5 个案例每个聚焦一个技术栈,第 6 个把所有能力合并为一个工业级 KV 数据库。


# 03.章节—案例覆盖矩阵(100% 全覆盖自检)

下表展示卷一每章在本卷的落地点。读者可反向使用——"我想练习智能指针,去找第 04 案例"。

卷一章节 核心知识点 主覆盖案例 辅助覆盖
02 基础语法 cin/cout、菜单循环 01 全部
03 数据类型 string、auto、enum class 01 02、04、06
04 运算符 运算符重载、<=> 06(KV 三路比较) 02(运算符重载)、05(原子运算)
05 复合类型 struct、vector、array 01 03、04、06
06 流程语句 switch、范围 for、结构化绑定 01 全部
07 函数 lambda、引用传参、默认参数 01 03(lambda 排序)、05(lambda 任务)
08 指针引用 裸指针 → 智能指针 04(JSON 节点) 02、06
09 类与对象 封装、五法则、构造析构 02 03、04、06
10 继承与多态 抽象类、虚函数、override 02 银行三态 / 03 身份三态 / 06 命令模式 04(JSON 节点)
11 内存模型 栈/堆/全局/静态分区 04(生命周期图)/ 05(线程栈) 06
12 动态内存 RAII unique_ptr/shared_ptr 04 JSON / 05 锁 RAII 06(全 RAII)
13 IO 与文件 fstream、filesystem 02 CSV / 03 文件矩阵 04、06 AOF
14 异常处理 try/catch、noexcept 04(JSON 异常体系)/ 06(KvError) 05
15 线程和锁 thread、mutex、jthread 05 06(shared_mutex)
16 STL 模板 vector/map/泛型 03(STL 全家桶) 04、05、06
17 预处理器 #define、__FILE__、Modules 06(KV_LOG 宏 + 单测宏) 05(日志宏)
18 特性图谱 variant/optional/string_view 04(variant 主场) 06(集成)

✅ 表中加粗的是"该章的首选案例",新手可按此顺序学。所有 17 章全部有主覆盖案例,无遗漏。


# 04.推荐学习路径

# 路径 A:新手线(按顺序通读,强烈推荐)

01 通讯录(C 风格起步,3 h)
    ↓ 升级为 class + 多态 + 文件
02 银行账户(OOP 大考,8 h)
    ↓ 抽象身份 + 加 STL
03 校园预约(STL 全家桶,10 h)
    ↓ 加现代内存 + 异常
04 JSON + 内存数据库(现代 C++,12 h)
    ↓ 加并发能力
05 多线程订单 + 线程池(并发栈,14 h)
    ↓ 集大成
06 MiniKVStore(毕业设计,18 h)
1
2
3
4
5
6
7
8
9
10
11

总耗时约 65 小时,相当于:每天 2 小时 × 33 天 / 周末全天 × 8 周。

# 路径 B:带 C 基础转 C++(按主题跳读)

OOP 主题:     02(多态三态)→ 03(抽象身份)→ 06(命令模式)
现代内存主题: 04(智能指针 + variant)→ 06(全 RAII)
并发主题:     05(mutex/cv/future/jthread)→ 06(shared_mutex)
工程主题:     04(异常体系)→ 05(线程池组件)→ 06(宏 + 单测)
1
2
3
4

# 路径 C:快速查漏(按卷一章节反查)

想练 去看哪个案例
多态 / 虚函数 02、03、06
智能指针 / RAII 04、05、06
异常处理 04、06
STL 容器与算法 03、06
多线程并发 05、06
宏与模板 06
一次性串完卷一所有章节 直接做 06

# 05.案例间承接关系(业务+技术双线)

01 学生通讯录(C struct)
   │
   │  痛点:"数据存内存就够了吗?" → 数据要持久化
   │  痛点:"一个 struct 怎么表达多种角色?" → 需要继承
   ▼
02 银行账户管理(class + 多态 + CSV)
   │
   │  痛点:"三种账户的类还能怎么扩展?" → 抽象身份接口
   │  痛点:"数组+find() 太低效?" → 用 STL map/multimap
   ▼
03 校园身份预约(多态 + STL 全家桶)
   │
   │  痛点:"CSV 太死板,能存嵌套数据吗?" → 需要 JSON
   │  痛点:"手动 new/delete 容易漏?" → 智能指针
   ▼
04 JSON 序列化器 + 内存数据库(现代内存模型)
   │
   │  痛点:"单线程访问太慢?" → 加并发
   │  痛点:"多个线程同时改怎么办?" → 锁 + 同步原语
   ▼
05 多线程订单系统 + 线程池(并发栈)
   │
   │  痛点:"想把所有能力合一做一个真实产品?" → 毕业设计
   ▼
06 MiniKV 存储引擎(卷一 17 章全章串联)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 06.统一的写作约定

为保证 6 个案例"看起来像一本书",本卷遵循以下统一约定:

# 6.1 每篇结构模板

# NN.案例名
> 上一案例的痛点 → 本案例如何解决(一句话)

## 00.案例元信息
- 难度:★★★☆☆
- 预估时长:X 小时
- 前置章节:卷一第 X/Y/Z 章
- 覆盖知识点:(矩阵表)
- 项目结构:(目录树)
- 编译命令:(一条命令跑通)
- 学习路径建议:(边读边写的 6 个阶段)

## 01.需求说明
(需求 / 功能 / 设计思路 / 涉及知识点)

## 02.菜单或主框架
(先搭骨架,让程序能跑起来)

## 03~0N.分步骤实现
(每个功能:需求 → 代码 → 测试 → 原理 → 陷阱)

## 0N.项目总结
- 代码整体结构
- 核心原理
- 优缺点分析

## 0N+1.项目技术思考
(本案例最值得思考的 2-3 个问题)

## 0N+2.衔接与延伸
- 与上一案例的差异(对比表)
- 下一案例的递进点
- 3 个延伸挑战(基础 / 进阶 / 现代化)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

# 6.2 代码风格

项目 约定
命名 类 PascalCase、函数/变量 camelCase、常量 UPPER_SNAKE
命名空间 教学代码用 using namespace std; 简化;工程代码(05、06)明确写 std::
头文件保护 #pragma once(现代写法)
空指针 一律 nullptr,禁止 NULL / 0
内存 案例 01-03 允许裸 new/delete(教学反例);案例 04 起全面 RAII
标准 基线 C++17;用到 C++20 特性会标注 🆕 C++20
错误处理 用户输入校验用返回码;资源/越界/解析失败用异常

# 6.3 术语统一

术语 本卷统一译法
member function 成员函数(不用"方法")
instance 对象(不用"实例",除了 STL 章)
pointer 指针(裸指针称"raw pointer")
smart pointer 智能指针
lambda Lambda 表达式(首字母大写)

# 07.常见疑问 FAQ

Q1:为什么从 12 个案例精简为 6 个?

A:原 12 个案例存在三组重复——"02 银行 + 03 职工"都是 OOP+CSV,"05 演讲 + 06 机房"都是 STL+文件矩阵,"07 票务 + 08 轮询 + 09 线程池"都是并发。精简后每个案例只聚焦一个核心技术栈,认知负担减轻,章节覆盖反而更完整(从 16/17 提升到 17/17)。

Q2:6 个案例之间能跳着学吗?

A:前 5 个建议按顺序学,因为存在数据/技术承接关系(如案例 02 的 Account 类会在案例 03 升级为 User 抽象基类、案例 04 用智能指针重构案例 03 的裸指针)。第 6 个毕业设计可以等前 5 个学完后再做,体感会有"原来如此"的爽感。

Q3:为什么案例 01 仍然用 struct 和裸数组?

A:卷一第 5 章先讲 struct,第 9 章才讲 class。01 故意保留"C 风格 C++"作为历史对照,让读者在 02 看到"类化"后的同一问题,体会封装的价值。

Q4:为什么案例 02、03 里还有 new T[N] 这样的裸指针?

A:这两个案例的主题是多态(卷一第 10 章),此时还没学到 RAII(第 12 章)。我们保留裸指针版本,等案例 04 再统一升级为 std::unique_ptr<Node>,让读者亲眼看到"同一份代码,RAII 版本少了多少行 delete"。

Q5:第 6 个 MiniKVStore 和前 5 个是什么关系?

A:前 5 个每篇覆盖卷一 3-5 章,是"专题练习";第 6 个是毕业设计——一个项目把卷一 17 章串起来。它不是"加难度",而是"换视角":从"练单点"切到"做系统"。建议分 5 次(每次 3-4 小时)完成,分别对应 MVP / 命令模式 / 异常+持久化 / 并发+TTL / 单元测试。

Q6:完成 6 个案例后我的水平能到哪?

A:参考下方"学习效果检验标准"——具备阅读开源 C++ 项目的能力,能独立开发中小型 C++ 应用,可以无缝进入卷二《工程卷》和卷三《底层卷》的学习。


# 08.学习效果检验标准

完成本卷 6 个案例后,你应该能够:

✅ 基础能力

  • 熟练使用 C++17/20 核心特性(auto / lambda / variant / optional / 智能指针 / 范围 for)
  • 理解面向对象设计原则(封装 / 继承 / 多态 / 五法则)
  • 掌握 STL 容器和算法组合(vector / map / unordered_map / sort / find_if)

✅ 工程能力

  • 设计可维护的多文件项目架构(实体层 / 管理层 / 持久化层 / 交互层)
  • 实现多线程安全程序(mutex / condition_variable / atomic / future)
  • 构建完整的项目构建系统(多文件 g++ / CMake)

✅ 系统思维

  • 从需求分析到代码实现的全流程能力
  • 性能优化和内存管理意识(栈 vs 堆、值传 vs 引用传 vs 指针传)
  • 错误处理和异常安全设计(错误码 vs 异常 / RAII 异常安全)

✅ 进阶准备

  • 为学习操作系统、网络编程打下基础
  • 具备阅读开源 C++ 项目(如 Redis / LevelDB / nlohmann/json)的能力
  • 能够独立开发中小型 C++ 应用,无缝进入卷二《工程卷》

# 09.与其他卷的衔接

  • 卷一《语法卷》:本卷是它的验收考。做不动的话回头复习对应章节。
  • 卷三《底层卷》:本卷案例 05 的线程池只做到"够用";想看无锁队列、原子内存序、协程,去卷三第 7-10 章。
  • 卷四《工程与源码卷》:本卷案例 06 的单元测试是手写版;工程实战用 Google Test / Catch2,详见卷四。

# 10.反馈

发现 bug、想法、希望增加的案例?欢迎到仓库提 Issue。祝你在 6 个案例里找到"会 C++"的那一刻。

特别提示:建议在学习过程中为每个案例创建独立的 Git 分支,记录自己的实现过程和思考。完成所有案例后,你将拥有一个展示你 C++ 技能成长的完整作品集。

上次更新: 2026/06/10, 11:13:41
特性图谱
学生管理通讯录系统

← 特性图谱 学生管理通讯录系统→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式