考慮下面這個簡單的例子:如何在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