【一天一篇CPP】C++的虚基类

1.一个派生类有多个直接基类,这些基类又有一个共同的基类,如图【画的很随便,就是B和C继承于A,D继承于B和C】


那么D不是有两份A的数据,如果不想保留那么多A的数据,可由使用虚基类。

方法:

class B :  virtual A 

同时

 class C : virtual A

在声明派生类时,指定继承方式的时候声明。这样B和C在派生到D的时候只有一份A的数据了!



2.一个例子:

class A{
public:
	A(int n) : a(n){}
	int a;
};

class B : vistual public A
{
public:
	B(int n) : A(n){ ......... } //调用A的构造函数
};

class C : vistual public A
{
public:
	C(int n) : A(n){ ........ } //调用A的构造函数
};

class D : public B, public C
{
	D(int n) :A(n),B(n),C(n){.........}//调用A和B和C的构造函数
};
//这样在D中只有一份A的数据,它是B和C在继承给D的时候共用的
//其中在类D中调用B和C的构造函数的时候不会间接调用A的构造函数【防止不知道调用的先后关系等问题产生的错误】,因此还要D的构造函数直接调用A的构造函数进行构造

在上面这个例子中 

 D d1; 

d1.B::a 和 d1.C::a将是同一个数据!




3.另一个例子,辨识虚继承的作用


假如B和C虚继承于A,而D直接继承于A,E直接继承与B和C和D。

那么B和C在派生到E的时候有一份A的数据,可用   E的对象.B::某个A的成员 和 E的对象.C::某个A的成员名 表示这个成员。

另外D中还有一份A的数据继承到E上,可用 E的对象.D::某个A的成员 表示这个成员。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值