作用
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/649e33ad95c35639478a501877d0a5d8.png)
虚基类构造函数
#include <iostream>
using namespace std;
class CBase
{
public:
int a;
public:
CBase(int na)
{
a=na;
cout<<"CBase constructor! "<<endl;
}
~CBase(){cout<<"CBase deconstructor! "<<endl;}
};
class CDerive1:virtual public CBase
{
public:
CDerive1(int na):CBase(na)
{
cout<<"CDerive1 constructor! "<<endl;
}
~CDerive1(){cout<<"CDerive1 deconstructor! "<<endl;}
int GetA(){return a;}
};
class CDerive2:virtual public CBase
{
public:
CDerive2(int na):CBase(na)
{
cout<<"CDerive2 constructor! "<<endl;
}
~CDerive2(){cout<<"CDerive2 deconstructor! "<<endl;}
int GetA(){return a;}
};
class CDerive12:public CDerive1,public CDerive2
{
public:
CDerive12(int na1,int na2,int na3):CDerive1(na1),CDerive2(na2),CBase(na3)
{
cout<<"CDerive12 constructor! "<<endl;
}
~CDerive12(){cout<<"CDerive12 deconstructor! "<<endl;}
};
int main()
{
CDerive12 obj(100,200,300);
cout<<" CDerive12:a = "<<obj.a<<endl;
cout<<" from CDerive1 : a = "<<obj.CDerive1::GetA()<<endl;
cout<<" from CDerive2 : a = "<<obj.CDerive2::GetA()<<endl;
}
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
A(int s)
{
cout<<s<<endl;
}
};
class B:virtual public A
{
public:
B(int i, int j=0):A(j)
{
cout <<i<<endl;
}
};
class C:virtual public A
{
public:
C(int i, int j=0):A(j)
{
cout <<i<<endl;
}
};
class D:public C,B
{
public:
D(int a, int b, int c, int d):mem1(a),B(c),C(d),A(a)
{
}
private:
B mem1;
};
int main(int argc, char* argv[])
{
D obj(1,5,3,8);
return 0;
}