【发布时间】:2015-11-16 20:36:49
【问题描述】:
考虑以下简单示例:
#include <iostream>
using namespace std;
class A {
public:
virtual void foo() {
cout<<"A"<<endl;
}
};
class B: public virtual A {
public:
virtual void foo(){
cout<<"B"<<endl;
}
};
class C : public virtual A {
public:
virtual void foo(){
cout<<"C"<<endl;
}
};
class D : public B, public C {
public:
void print(){
foo();
}
};
int main () {
D d;
d.print();
return 0;
}
此代码将不起作用,因为对 foo 的调用不明确。但问题是:
如何定义应该从哪些类继承哪些方法?如果我有这样的机会呢?
【问题讨论】:
-
基本上有一个问题和一个建议: 问:发生多重继承歧义的具体用例是什么?答:不要使用多重继承,因为几乎总有办法让设计更加明确。
-
@MABVT 多重继承非常有用,替代方案通常会增加复杂性。
-
@curiousguy 嗯。如果您不必处理这些歧义问题,多重继承本身可能很有用!事实上,我很少有 Mult.Inh 的用例。之前涉及有意识的模棱两可... Oo 只是好奇:您是否有任何具体的例子,OPs 情况发生的地方并且实际上是在一个有用的上下文中?似乎我可以在这一点上学到新的东西。 ;)
-
@MABVT 您是否经常对 MI 产生歧义?当你这样做时,它是一个难题?
-
@MABVT 没有人说 MI 是灵丹妙药,或者它比其他一些解决方案更好。我喜欢回答“MI 需要吗?”这个问题。从这个常见问题解答。我建议您阅读此部分的常见问题解答isocpp.org/wiki/faq/multiple-inheritance
标签: c++ inheritance multiple-inheritance ambiguity virtual-inheritance