【发布时间】:2012-06-26 10:20:39
【问题描述】:
class IA
{
public:
virtual void a() = 0;
};
class A: virtual public IA
{
public:
virtual void a()
{
}
};
class IB: virtual public IA
{
public:
virtual void b() = 0;
};
class B: virtual public IB, public A
{
public:
virtual void b()
{
}
};
你总是像我上面那样继承你的虚拟接口吗?如果没有,您将如何实现上述代码?
【问题讨论】:
-
看看this
-
如果层次结构必须是这样,那么虚拟继承是唯一的选择,但在大多数情况下,在 C++ 中,您最终不会采用这种类型的设计。我在职业生涯中使用虚拟继承的情况很少......
-
这种设计会发生,但希望很少。在任何情况下,都必须事先考虑好,并权衡其他可能性,因为有时您不能只将
virtual添加到第三方代码中。 -
@David Rodríguez 但是如果我在接口之间使用继承,那么我将不得不使用虚拟继承,就像上面的例子一样,对吧?我有哪些设计替代方案?