AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 50
operator<=> — C++23 中三路比较的思想
C++ SELF
等级 50,
课时 0
我们来讲解为什么类型在 C++ 中需要为 STL 提供“自然”顺序,三路比较
operator<=>
(spaceship)是如何工作的,
= default
有什么作用,如何手动地优雅地指定顺序(以及为什么比较结果通过
!=
0
来检查),并且如何使顺序与
operator==
一致。通过小型示例应用 TaskBox 加深理解并讨论常见错误。
操作符 vs 比较器
C++ SELF
等级 50,
课时 1
讲解何时将比较“嵌入”类型,通过
operator==
和
operator<=>
,何时更适合通过
std::sort
使用局部比较器来定义规则。以
Task
模型为例讨论“同一性”的含义(按
id
相等还是按所有字段相等)、通过
std::find
和
std::find_if
的查找,以及典型的设计错误和“不纯”的比较器。
“has‑a” vs “is‑a”:设计工具
C++ SELF
等级 50,
课时 2
解析如何在类设计中区分
is‑a
与
has‑a
关系:何时适合“是”,何时更适合“包含/使用”。以教学用的 todo 应用为例展示组合和委托:把
TodoApp
作为协调者,
TaskRepository
作为存储,
Printer
和 CLI 层负责 I/O。并单独说明组合的形式(按值、按引用、
std::unique_ptr
)及常见错误。
模块分离:model / storage / parser / cli
C++ SELF
等级 50,
课时 3
我们把控制台应用按职责划分模块:
model
(数据与不变量)、
storage
(操作与存储)、
parser
(字符串 →
Command
)、
cli
(输入/输出与协调)。以 todo 管理器为例,追踪一条命令的路径,设计
Task
和
TaskRepository
,用
std::istringstream
编写
parse_command
,并在“轻”接口中把各部分连接起来,避免在存储层打印或在解析器里执行逻辑。
依赖与反转
C++ SELF
等级 50,
课时 4
我们来分析为什么隐藏的依赖(比如直接使用
std::cout
)会让代码变得脆弱,如何通过反转来“展开”责任(在
main()
中组装),以及如何通过
std::istream
&
/
std::ostream
&
、
TaskRepository
&
和独立组件(
Parser
、
Printer
、
CLI
)来定义诚实的契约。另有讨论引用、指针、所有权(
std::unique_ptr
)以及通过函数实现的“软”反转(
std::function
)。
Please enable JavaScript to continue using this application.