1.C++中類可以多繼承
即一個(gè)子類繼承多個(gè)父類,而在C#和java中,可以多繼承多個(gè)接口,但是不能多繼承多個(gè)基類。
主要是考慮到多繼承的父類如果繼承同一個(gè)基類,那么就會(huì)產(chǎn)生二義性的問題,例如:
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;
}
這一段代碼會(huì)在編譯時(shí)報(bào)錯(cuò),其中讀取變量a時(shí),可能是基類A中的變量也有可能是基類B中的變量,會(huì)有二義性的問題,改正的方法是在使用變量a時(shí),顯示指明其位于哪個(gè)基類A::a
另外為了避免這種容易犯錯(cuò)的寫法,應(yīng)該盡量不適用多繼承類,一個(gè)不好的范例就是C++的iostream類,就是一個(gè)菱形繼承,包含頭文件過多效率低下,且不容易擴(kuò)展,需要時(shí)刻主要到其菱形繼承的問題。