AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 51
virtual/override — 动态多态
C++ SELF
等级 51,
课时 0
解析 C++ 中的动态多态:为什么基类需要
virtual
方法、通过
Base
&
/
Base
*
如何发生“虚拟调用”、静态类型与真实类型有何区别,以及为什么
override
是防止“几乎一致”的签名的保护。最后 — 一个包含操作(
Action
)的实用示例并分析常见错误。
Object slicing — Base b = Derived{} 破坏多态
C++ SELF
等级 51,
课时 1
解析 C++ 中的
object slicing
:为什么“按值存储基类对象”(
Base
←
Derived
)会“切掉”派生类并关闭虚调用,slicing 在参数和容器中(例如
std::vector<Base>
)如何出现,以及如何通过
const
Base
&
和
std::unique_ptr
正确设计接口和存储。
虚析构函数
C++ SELF
等级 51,
课时 2
我们来分析,为什么析构函数是类契约的一部分,以及当对象通过基类指针/所有权被销毁时会发生什么:对
delete
于
Base*
和
std::unique_ptr<Base>
,都必须调用正确的销毁链。我们展示没有
virtual
析构函数时的危险情况,给出规则
virtual
~Base()
=
default
,添加一张选择图,并分析典型错误以及使用
override
的规范。
final 与禁止继承 — 何时有用
C++ SELF
等级 51,
课时 3
我们来分析在 C++ 中为何要对类和虚方法使用
final
:禁止继承如何保护不变式、为什么组合
override
final
可以固定契约、如何设计“基类可扩展 — 叶子为
final
” 风格的继承层次,以及为什么在通过
std::unique_ptr
<
Command
> 持有时
final
并不能取消
virtual
析构函数的必要性。最后 — 常见错误与一个实用的 CLI 命令示例。
多态的代价
C++ SELF
等级 51,
课时 4
我们来拆解 C++ 中动态多态的“成本”:通过
Base&
/
Base*
进行虚调用与普通调用有何不同,为什么一旦用了
virtual
,几乎不可避免地就会牵涉所有权与生命周期(例如
std::unique_ptr
),基类契约如何把代码绑定在一起并抬高维护成本,以及多态究竟在什么情况下才真正值得使用。最后,我们会比较几种替代方案:
enum class
+
switch
、通过
std::function
用 lambda 传递行为,以及通过
std::variant
处理封闭类型集合。
Please enable JavaScript to continue using this application.