多级继承 C++

Posted

技术标签:

【中文标题】多级继承 C++【英文标题】:Multilevel inheritance C++ 【发布时间】:2017-11-23 17:44:29 【问题描述】:

假设类 C 继承自类 B,该类覆盖 A 中定义的虚函数。C 不会覆盖该函数。当 A* 类型的指针指向 C 类型的对象时,函数调用会使用 B 中的覆盖版本吗?

【问题讨论】:

你试过了吗? @ChristianHackl 我对阻止这种看似简单的问题持谨慎态度。 C++ 有很多情况下 UB 似乎可以工作,但实际上并没有,问一下也无妨:) @Quentin:是的,也不是。一个更好的问题是“当我尝试时它确实会调用它,但是这种行为是否得到保证?” 就目前而言,这个问题对我来说几乎就像一个家庭作业。 @ChristianHackl 够公平的! 【参考方案1】:

是的!

在语义上,C 隐式地从 B 继承其实现。 具体来说,被调用的虚函数的实现是最可用的派生函数。

【讨论】:

【参考方案2】:

当 A* 类型的指针指向 C 类型的对象时,函数调用会使用 B 中重写的版本吗?

是的。

【讨论】:

【参考方案3】:

是的,函数调用将使用 B 中的覆盖版本,除非您在 C 中实现虚函数。在这种情况下,函数调用将是 C 的。

【讨论】:

以上是关于多级继承 C++的主要内容,如果未能解决你的问题,请参考以下文章

多级继承 C++

C++ 多级继承 - 调用基本构造函数错误

c ++多级继承不起作用[重复]

在多级和多级继承中使用 super()

如何使用类实现多级继承

CRTP 和多级继承