考虑下面这个简单的例子:如何在C++多继承中选择继承哪些基类方法?
#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是ambigous。但问题是:
如何定义哪些类应该继承的方法?如果我有这样的机会?
基本上有一个问题,一个建议: 问:您发生多重遗传歧义的具体用例是什么? 答:不要使用多重继承,因为几乎总是有解决方法,导致更明确的设计。 – MABVT
@MABVT多重继承非常有用,替代方法通常会增加复杂性。 – curiousguy
@curiousguy嗯。如果你不必处理那些含糊不清的问题,多重继承本身可能是有用的!其实我很少有Mult.Inh的用例。有意识的含糊之前涉及... Oo 只是好奇:你有任何具体的例子,在哪里OPs的情况发生,实际上在一个有用的背景下? 似乎我可以在这一点上学到新东西。 ;) – MABVT