C++里的虚继承

        虚继承‌是C++中一种特殊的继承机制,用于解决菱形继承问题也就是多继承中的二义性问题。在多继承中,如果多个基类共同继承一个公共基类,那么在派生类中可能会出现数据冗余和访问冲突的问题。为了解决这些问题,引入了虚继承机制。

        语法:虚继承通过在继承时加上 virtual 关键字实现:

class 父类:virtual 祖父类 {};   // 虚继承
  
class 子类:继承方式 父类1, 继承方式 父类2...  {};//普通多继承 

虚继承的原理

        C++在设计虚继承机制中,提供一个vtable(虚表)和vptr(虚指针)。虚指针指向虚表,虚表就是用来存放虚基类(祖父类)成员的地址。

        基类在采用虚继承时,编译器就会给这个类分配一个vptr(虚指针,32位地址空间占4个字节,64位地址空间占8个字节),要访问虚基类的成员时,就通过查表,虚基类的成员只保留一份,不管谁来访问,就是通过查表,虚表和虚指针都是通过编译器自身维护。

        由于虚基类的成员只保留一份,从整体来说,虚继承比普通多继承更加节省空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值