C++中多重继承在内存中的存储模型

请描述一下多重继承在内存中的存储模型

    • 普通类在内存中的存储情况 

VTAB(<- this)

 Data

    • 如果一个类有虚函数,那么它就有虚函数表,类的第一个单元是一个指针,指向这个虚函数表
    • 如果一个类没有虚函数,他的祖先(所有父类)均没有虚函数,那么它的内存映像和C语言里的结构一样
    • 如果类Y是是类X的一个继承(X是父类),那么类Y在内存中的结构如下

YVTAB(<- this)

Xdata

Ydata

    • 现在看看class D多重继承
class D : public A, public B, public C 

{ 

   .... 

}

    • 有了这种多重继承关系之后,这几个类在内存中的存储结构如下,

D的vTable(存的是一个指针)

A的数据

B的vTable(存的是一个指针)

B的数据

C的VTable(存的是一个指针)

C的数据

D的数据

    • 多重继承时,当把一个派生类强行转化成它的基类,它是能准确的找到他对应的虚函数表的。
    • 而通过这个多重继承中的某个基类,其实也能找到其对应的派生类的虚函数表(通过偏移)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值