pay*_*ayo 6 c++ multiple-inheritance
说我有4节课:
class I { public: virtual void X() = 0; };
class A : public virtual I { public: virtual void X() { } };
class B : public I { };
class C : public A, public B { };
Run Code Online (Sandbox Code Playgroud)
I,B并且C是抽象的,而A不是.如果我只需添加virtual到继承I的B,那么A::X()解决I::X()在C.
但是,我无法改变其来源B.
我的问题:我能A::X()解决I::X的C,而不能改变B?我试过声明A并B虚拟C无济于事.我试图没有冗余代码(例如,有C声明X(){A :: X();}).任何整洁的黑客?
另外 - 有一些非常类似的问题,但我找不到任何关于使用virtual继承的讨论.如果我错过了,请指点我.
这非常好:什么时候虚拟继承是一个好的设计?
这里的问题是,在 C 中你有两个接口 I。这就是为什么 A::x() 满足它的接口 I - 但它不能从类 B 中抽象接口 I。对于 C 来说,只有一个接口的唯一方法I - 是将 B 更改为实际上从 I 派生 - 这样,来自 A 和 B 的 I 接口都将合并到 C 中的一个。您无法更改 B - 所以唯一的方法是添加您正在尝试的冗余代码避免。我的意思是定义 C::X()。
| 归档时间: |
|
| 查看次数: |
2038 次 |
| 最近记录: |