仅声明一个类公共虚拟
Declaring only one class public virtual
我有一个类,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();
}
相关文章:
- 有没有比在库中添加一个并非由所有派生类实现的新虚拟函数更好的设计实践
- 覆盖作为另一个类的好友的虚拟受保护方法
- 重写另一个类中的虚拟方法以在 C++ 中访问其成员
- 如果一个类继承了一个带有虚拟 dtor 的类,为什么要删除一个没有虚拟 dtor 的类是可以的
- 为什么在std::optional的某些实现中有一个虚拟工会成员?
- 创建一个允许轻松创建虚拟函数包装器函数的C++宏
- C :基类调用自己的虚拟函数 - 一个反图案
- 有什么理由在没有继承的情况下声明一个虚拟方法
- 虚拟继承的性能开销(如果只有一个基具有数据成员)
- 如何使用一个 VirtualFree 调用删除多个相邻的虚拟内存分配?
- 是否可以在另一个方法中使用模板类中定义的虚拟方法
- 我们如何有证据表明,声明虚拟函数的类是2个字节,其中一个不超过一个未声明,而在子类中
- C 是纯虚拟函数,也是一个定义或仅声明
- 专用纯虚拟模板函数(未定义引用)的另一个问题
- 在c++中选择两个纯虚拟函数中的一个
- 为什么基类被继承两次,即使其中一个是虚拟继承的
- 确定一个方法是否是纯虚拟的(c++)
- 如何使用派生类中的虚拟函数,该函数在另一个具有基类参数的类中声明
- 当一个类有一些虚拟方法时,它的所有方法都使用 vtable 吗?
- 我可以让虚拟抽象类抛出一个异常吗?