AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 52
Pure virtual (= 0) 与抽象类
C++ SELF
等级 52,
课时 0
我们来解析在 C++ 中抽象类型如何通过
pure virtual
方法工作:语法
=
0
的含义、为什么不能直接创建抽象类、如何通过
override
正确实现“接口”、以及为什么多态基类需要虚析构函数。实践部分 — 使用带有不同打印策略的 Tasky 小示例。
接口契约
C++ SELF
等级 52,
课时 1
我们讨论为什么接口需要“契约”(前置条件和后置条件)、为什么“精简”接口更易实现和测试、如何通过
const
、
std::string_view
、
std::optional
和
[[nodiscard]]
在签名中固定契约,如何在不使用异常的情况下诚实地描述失败,以及状态不变式如何影响行为。最后 — 给出 TaskBoard 的实践示例并分析典型设计错误。
通过抽象持有 — std::unique_ptr<IService>
C++ SELF
等级 52,
课时 2
我们讲解实用模式“通过抽象持有”:如何以接口形式保存服务,形式为
std::unique_ptr
<
ILogger
>
, 为什么需要为多态删除提供
virtual
析构函数,
std::move
是如何工作的,“空指针”的含义(
nullptr
),以及如何在示例小应用
TaskApp
中使用,包括
ConsoleLogger
/
NullLogger
的实现和集合
std::vector
<
std::unique_ptr
<
IService
>>
的用法。
根据配置/CLI 的实现工厂
C++ SELF
等级 52,
课时 3
讲解如何通过工厂根据设置(配置/CLI)集中选择实现:将“脏”的字符串输入与类型安全的
enum class
分离,将模式解析为
StorageKind
,然后通过
make_storage
创建具体存储,返回
std::unique_ptr<ITaskStorage>
。以 TaskTracker 为例比较基于
std::vector
和
std::map
的实现,讨论架构细节和常见错误。
RTTI 作为最后的手段
C++ SELF
等级 52,
课时 4
我们把 C++ 中的 RTTI 当作处理罕见情形的“灭火器”来讲:静态类型和动态类型有什么区别,如何通过
dynamic_cast
做安全转换(检查
nullptr
并要求基类为多态即有
virtual
方法)、何时适合使用
typeid
,以及为什么不应把
std::type_info
::
name()
当作稳定标识符。以
ITaskStorage
为例演示如何通过在接口上添加虚方法
debug_describe
(
std::ostream
&) 用“正常”的多态替代 RTTI。
Please enable JavaScript to continue using this application.