多重继承来解决抽象类

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到继承IB,那么A::X()解决I::X()C.

但是,我无法改变其来源B.

我的问题:我能A::X()解决I::XC,而不能改变B?我试过声明AB虚拟C无济于事.我试图没有冗余代码(例如,有C声明X(){A :: X();}).任何整洁的黑客?

另外 - 有一些非常类似的问题,但我找不到任何关于使用virtual继承的讨论.如果我错过了,请指点我.

Pio*_*ycz 2

这非常好:什么时候虚拟继承是一个好的设计?

这里的问题是,在 C 中你有两个接口 I。这就是为什么 A::x() 满足它的接口 I - 但它不能从类 B 中抽象接口 I。对于 C 来说,只有一个接口的唯一方法I - 是将 B 更改为实际上从 I 派生 - 这样,来自 A 和 B 的 I 接口都将合并到 C 中的一个。您无法更改 B - 所以唯一的方法是添加您正在尝试的冗余代码避免。我的意思是定义 C::X()。