【C++】虚表与虚表指针,虚基类表与虚基类表指针

虚函数表与虚函数表指针
  • 虚函数表指针:

虚函数表指针又称为:虚表指针。虚表指针指向的是一张虚函数表。

  • 虚函数表:

虚函数表又称为:虚表。虚表中存放的是虚函数指针,因此虚表可以看成是一个函数指针数组。虚表在编译阶段生成。

  • 虚表指针在哪里?

虚表指针存在于有虚函数的类对象中;

  • 虚表在哪里?

虚表存在于.rodata段;

  • 虚函数在哪里?

虚函数保存在代码段;

  • 基类虚表的构建规则:

按照虚函数在基类中的声明顺序存放在虚函数表中。

  • 派生类虚表的构建规则:
  1. 将基类虚表中的内容拷贝一份保存到派生类的虚表中;
  2. 如果派生类中重写了基类中的虚函数,那么在派生类的虚表中,派生类重写后的虚函数地址将替换(覆盖)掉继承下来的虚函数地址;
  3. 派生类自己增加的虚函数,按照在派生类中的声明顺序存放在派生类的虚表的后边;(注意:在VS下监视窗口查看时,没有显示);

即派生类虚表中保存的是继承的未被重写的虚函数,派生类重写之后的虚函数以及派生类自己的虚函数的地址;

  • 虚函数表作用:

用来解决保存虚函数的问题以及实现多态的基础;

虚基类表和虚基类表指针
  • 虚基类表指针:

虚基类表指针又称为:虚基表指针;是虚继承下来的派生类中的成员;指向一张虚基表;

  • 虚基类类表:

虚基类表又称为:虚基表;虚基表中记录了虚基类与派生类的偏移地址;通过偏移地址,这样就找到了虚基类成员;
虚基表中存放两个成员:一个是0(可以认为是虚基类与自己的偏移量),另一个是虚基类与派生类的偏移量;

  • 虚基表指针在哪里?

虚基表指针存在于虚继承的派生类对象中;

  • 虚基类表的作用

虚基类表就是用来解决继承过程中,菱形继承的二义性和数据冗余的问题。

虚基表指针和虚表指针对比
虚基表指针虚表指针
生成条件续集继承时产生有虚函数时产生
指向指向虚基表指向虚表
指向内容派生类对象中的基类成员对于该对象首地址的偏移量类中所有虚函数的地址
作用解决菱形继承时的二义性和数据冗余的问题是多态的基础
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值