虚函数表与虚函数表指针

  • 虚函数表指针:

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

  • 虚函数表:

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

  • 虚表指针在哪里?

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

  • 虚表在哪里?

虚表存在于.rodata段;

  • 虚函数在哪里?

虚函数保存在代码段;

  • 基类虚表的构建规则:

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

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

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

  • 虚函数表作用:

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

虚基类表和虚基类表指针

  • 虚基类表指针:

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

  • 虚基类类表:

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

  • 虚基表指针在哪里?

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

  • 虚基类表的作用

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

虚基表指针和虚表指针对比

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

【C++】虚表与虚表指针,虚基类表与虚基类表指针相关推荐

  1. 虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?...

    五条基本规则: 1.如果基类已经插入了vptr, 则派生类将继承和重用该vptr.vptr(一般在对象内存模型的顶部)必须随着对象类型的变化而不断地改变它的指向,以保证其值和当前对象的实际类型是一致的 ...

  2. C++中虚继承产生的虚基类指针和虚基类表,虚函数产生的虚函数指针和虚函数表

    本博客主要通过查看类的内容的变化,深入探讨有关虚指针和虚表的问题. 一.虚继承产生的虚基类表指针和虚基类表 如下代码:写一个棱形继承,父类Base,子类Son1和Son2虚继承Base,又来一个类Gr ...

  3. c++ 虚函数多态、纯虚函数、虚函数表指针、虚基类表指针详解

    文章目录 静态多态.动态多态 虚函数 哪些函数类型不可以被定义成虚函数? 虚函数的访问方式 析构函数中的虚函数 虚函数表指针 vptr 多继承下的虚函数表 虚基类表指针 bptr 纯虚函数 抽象类 虚 ...

  4. 【C++】继承和派生、虚继承和虚基类、虚基类表和虚基类指针

    继承和派生.虚继承和虚基类.虚基类表和虚基类指针 继承和派生 继承概述 继承基本概念 派生类中的成员 继承的内容 派生类定义 派生类访问控制 对象构造和析构 对象构造和析构的调用顺序 继承中的构造和析 ...

  5. C++学习 对象模型之虚基类,虚基类表,虚基类表指针

    1.虚基类 什么是虚基类,虚基类的作用是什么? 首先虚基类是为了解决多继承产生的二义性问题,范例代码如下: #include "stdafx.h" #include <std ...

  6. C++之抽象基类与纯虚函数

    // Vitual_Base.cpp : Defines the entry point for the console application. //抽象基类与纯虚函数#include " ...

  7. 虚函数,虚基类 与纯虚函数 二

    虚函数    还是先看代码 class A { public:     void funPrint(){cout<<"funPrint of class A"<& ...

  8. C++之继承探究(十):抽象基类与纯虚函数

    前文:C++之继承探究(九):多态的代价 抽象基类与纯虚函数   ♠\spadesuit♠ 纯虚函数:虚函数只有声明,函数体=0,就是一个纯虚函数,纯虚函数没有函数体,不需要实现.在子类里实现纯虚函数 ...

  9. C++ 基类和派生类的virtual虚析构函数

    virtual虚函数与C++的多态息息相关,C++中基类采用virtual虚析构函数主要目的是为了防止潜在的内存泄漏. 具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放.假 ...

  10. C++ day24 继承(四)抽象基类,纯虚函数,protected

    文章目录 关键字protected(带来方便同时带来危险,最好不用) 抽象基类和纯虚函数(is-a关系用公有继承实现有时候也不太合适) 用圆和椭圆的笨拙派生为例,挑拨is-a和公有继承的搭档关系 替代 ...

最新文章

  1. 第一部分:基础知识(第一章)屏幕部分续
  2. Linux服务源码安装后开机自启动04-php-fpm
  3. Oracle中dbms_job包的使用
  4. cornerMinEigenVal函数
  5. Eureka出现Root name ‘timestamp‘ does not match expected (‘instance‘) for type xxx的错误,如何解决?
  6. 使用Docker Compose 搭建lnmp
  7. C# 特性(Attribute)
  8. Map<String,Object>接收参数,Long类型降级为Integer,报类型转换异常
  9. 二、在jQuery中使用mockjs
  10. vue 限制渲染条数_深入理解Vue 的条件渲染和列表渲染
  11. 给2020划重点:最火的10个关键词和28个书单
  12. Hadoop入门进阶步步高(三-配置Hadoop
  13. cv::createTrackbar cv::threshold
  14. 如何进行多云环境中的数据管理?
  15. Ragnar Locker 卷土重来:美国52个关键信息基础设施被入侵
  16. 中职计算机应用基础表格制作说课稿,表格制作说课稿.doc
  17. 新手玩转Linux Kernel漏洞之Null Pointer Dereference
  18. Free Candies UVA - 10118
  19. TCP协议与SCTP协议的区别
  20. mimikatz工具使用

热门文章

  1. 大数据告诉你——垃圾围城,现行的垃圾分类制度,作用到底能有多大?
  2. 「黑科技」盘点那些脑洞大开的人类设计的“异形”机器人
  3. 对话现实版“谢耳朵”:多重宇宙和引力、超弦理论、暗能量
  4. 【Unity 框架】QFramework v1.0 使用指南 架构篇:05. 引入 Utility | Unity 游戏框架 | Unity 游戏开发 | Unity 独立游戏
  5. 泪目了,一位轮椅上的清华博士师兄
  6. mysql释放所有_mysql表空间释放情况汇总
  7. 我心有猛虎,细嗅蔷薇下
  8. 羊台山西丽路线登山记
  9. 如何根本上解决屎山代码的问题
  10. 当电脑内存比较小的时候,小于4G,安装32bit还是64bit呢