虚基类知识

1虚基类的作用

如果一个派生类有多个直接基类,而直接基类又有一个共同的基类,则在最终的派生类中会保留该间接共同基类数据成员的多份同名成员,虚基类就是在继承间接共同基类时只保留一份

注:虚基类并不是在声明基类时声明的而是在声明派生类时指定继承方式声明的

eg

class A{

……

};

class B:virtual public A

{

};

class C:virtual public A

{

};

声明基类的一般形式为

class 派生类名:virtual 继承方式 基类名

(经过多条派生路径被一个派生继承时,该派生类只继承该基类一次)

🐵注:

为了保证虚基类在派生类中只被继承一次,应当在该基类的所有直接派生类中声明为虚基类,否则会出现多次继承

2虚基类的初始化

如果在虚基类中定义了带参数的构造函数,没有定义默认构造函数,则在所有派生类中,通过构造函数初始化表对虚基类进行初始化

class A

{

A(int i){}//基类构造函数

};

class B:virtual public A

{

B(int n):A(n){}

};

class C:virtual public A{

C(int n):A(n){}

};

class D: public C,public B

{

D(int n):A(n),B(n),C(n){}

};

🐵注:在派生类中不仅要对直接基类进行初始化,还要对虚基础类进行初始化(并没有被多次初始化)

11.7基类和派生类的转换

公有继承:保持了除构造函数和析构函数以外所有的基类成员,基类的公有成员和保护成员都可以在派生类型访问,在派生类外可以调用基类的公有函数以访问基类的私有数据成员

所有基类能实现的功能,公用派生类都可以实现

子类型: 公有派生类

赋值兼容: 不同数据类型之间的自动转换和赋值

基类和派生类也具有赋值兼容关系

(1)派生类的值可以直接赋值给基类对象,反过来不可以,同一基类的不同派生类也不可以互相赋值

(大材小用,舍弃派生的成员)

(2)派生类对象可以直接代替基类对象向基类对象的引用进行赋值或者初始化

A al;//基类对象

B BL ;派生类对象

A&r=al;

也可以用子类对象初始化r

A&r=BL;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值