//在多重派生中如果希望公共的基类在派生类中只有一个拷贝,可将此基类说明为虚基类
//virtual public base0
//如果虚基类的构造函数是默认或者缺省够造函数那么后面的派生类则无需对虚基类的构造函数进行调用了
//需要注意的是如果虚基类中没有默认构造函数,或者中间的派生类采用的不是默认构造函数或者有参数,那么在所有的派生类中必须都要有虚基类构造函数的说明
//而且只有最远派生类的对虚基类的构造函数使用有效,之前的都是无效的,而且构造函数只能被调用一次;
//虚基类
/*
class base0 {
public:
int var0;
base0(int var0) ;
};
base0::base0(int var0)
{
this->var0 = var0;
}
class base1:virtual public base0 {
public:
int var1;
base1(int var0,int var1);
};
base1::base1(int var0,int var1):base0(var0)
{
this->var1 = var1;
}
class base2 :virtual public base0 {
public:
int var2;
base2(int var0, int var2);
};
base2::base2(int var0, int var2) :base0(var0)
{
this->var2 = var2;
}
class base3:public base1,public base2 {
public:
base3(int var0, int var1, int var2,int var3);
};
base3::base3(int var0, int var1, int var2, int var3): base0(var3),base1(var0,var1),base2(var2,var3)
{
}
int main()
{
base3 b(1, 2, 3, 4);
cout << "b.base1.var0:" << b.base1::var0 << endl;
cout << "b.base2.var0:" << b.base2::var0 << endl;
b.base1::var0 = 10;
cout << "b.base2.var0:" << b.base2::var0 << endl;
system("pause");
}
*/
C++虚基类时使用以及构造函数的特殊之处
最新推荐文章于 2022-02-08 10:29:53 发布