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类,就是一个菱形继承,包含头文件过多效率低下,且不容易扩展,需要时刻主要到其菱形继承的问题。