1.C++中類可以多繼承
即一個子類繼承多個父類,而在C#和java中,可以多繼承多個接口,但是不能多繼承多個基類。
主要是考慮到多繼承的父類如果繼承同一個基類,那么就會產生二義性的問題,例如:
class A
{
public:
int a = 1;
};
class B
{
public:
int a = 2;
};
class C :public A, public B
{
public:
void print() const
{
cout << a << endl;
}
};
int main()
{
C c;
c.print();
return 0;
}
這一段代碼會在編譯時報錯,其中讀取變量a時,可能是基類A中的變量也有可能是基類B中的變量,會有二義性的問題,改正的方法是在使用變量a時,顯示指明其位于哪個基類A::a
另外為了避免這種容易犯錯的寫法,應該盡量不適用多繼承類,一個不好的范例就是C++的iostream類,就是一個菱形繼承,包含頭文件過多效率低下,且不容易擴展,需要時刻主要到其菱形繼承的問題。