之前提过关于公有多继承存在同名二义性问题,所以c++才会有虚基类来解决这类的问题。
虚基类继承,使得基类的多个虚基继承派生类中的同名成员,存在于相同的地址,也就是同一个东西,所以当他们共同有一个派生类时,这个派生类所继承的不是俩个同名成员,其实只有一个,故不发生二义性问题
构造调用顺序:先调用base(调用直接基类时,直接基类是由base继承过来),接着根据base3的继承申明,依次调用基类,从结果可知确实如此;析构顺序相反
#include<iostream>
using namespace std;
class base{
public:
base()
{
a=5;
cout<<"base a ="<<a<<endl;
}
protected:
int a;
};
class base1:virtual public base{
public:
base1()
{
a+=10;
cout<<"base1 a ="<<a<<endl;
}
};
class base2:virtual public base{
public:
base2()
{
a+=20;
cout<<"base2 a ="<<a<<endl;
}
};
class base3:public base1,public base2{
public:
base3()
{
cout<<"base3 a ="<<a<<endl;
}
};
int main()
{
base3 obj;
return 0;
}
以下时掉用结果
base a =5
base1 a =15
base2 a =35
base3 a =35
Process exited after 0.2931 seconds with return value 0
请按任意键继续. . .