仅声明一个类公共虚拟

Declaring only one class public virtual

本文关键字:虚拟 一个 声明      更新时间:2023-10-16

我有一个类,C,在菱形中,类为Base,A和B。有一个方法 Base::foo(),它在类 A 和 B 中都被覆盖。当我调用 C::foo() 时,我想调用 B::foo(),而不是 A::foo()。

一种解决方案声称,执行此操作的方法是使 A 虚拟继承自 Base 并让 B 正常继承。这样,我就可以实现这一点,而无需重新实现 C::foo()。

但是,我没有找到任何其他关于这是否可能的信息,因为似乎 A 和 B 都需要声明为虚拟以避免创建两个 Base 副本。

建议的解决方案是否正确?

以这种方式显式定义C::foo()

C::foo() {
  B::foo();
}