当前位置: 首页 > news >正文

【C++学习笔记】深入理解虚函数和多态

在这里插入图片描述


文章目录

  • 1. 基本概念
    • 1.1 虚函数
    • 1.2 虚函数表
    • 1.3 虚函数表指针
    • 1.4 虚函数表在支持多态方面的工作原理
  • 2. 类对象在内存中的布局
  • 参考

1. 基本概念

1.1 虚函数

类的成员函数,并不占用类对象的内存空间。

类中有虚函数,编译器会向类中插入一个看不见的成员变量,类似下面的伪代码:

class A
{public:void *vptr; //虚函数表指针(virtual table pointer)//......
};

这个看不见的成员变量,就叫虚函数表指针


1.2 虚函数表

虚函数表的生成时机:
在编译过程中,当类A中虚函数个数≥1个,编译器就会为类A生成一个虚函数表(virtual table),这个虚函数表会一直伴随着类A,编译完成,在程序执行的时候,也会被加载到内存中。


1.3 虚函数表指针

在这里插入图片描述


在这里插入图片描述


1.4 虚函数表在支持多态方面的工作原理

在这里插入图片描述

多态必须存在虚函数,没有虚函数,绝不可能存在多态

从代码实现上:
在这里插入图片描述


class Base
{public:virtual void myvirfunc(){}
};int main()
{Base*pa = new Base();pa->myvirfunc();//这是不是多态,是多态的Base base;base.myvirfunc();//这个就不是多态的Base* ybase = &base;ybase->myvirfunc();//这个也是多态
}

在这里插入图片描述


从表现形式上:

  1. 程序中既存在父类也存在子类,父类中必须含有虚函数,子类中也必须重写父类中的虚函数。
  2. 父类指针指向子类对象,或者父类引用绑定(指向)子类对象。
  3. 当通过父类的指针或引用,调用子类中重写的虚函数时,就能看出多态性的表现了。
class Derive:public Base
{
public:
virtual void myvirfunc(){}
}/父类指针指向子类对象
Derive derive;
Base*pbase =&derive;
pbase->myvirfunc();//Derive:myvirfunc()
/或者
Base*pbase2=new Derive();//释放内存请自行释放,在这里没演示
pbase2->myvirfunc();//Derive:myvirfunc()
//父类用绑定(指向)子类对象
Derive derive2;
Base&yinbase derive2;
yinbase.myvirfunc();//Derive:myvirfunc()

在这里插入图片描述


2. 类对象在内存中的布局

TBD.


参考

【1】C++ 多态
【2】C++ 一篇搞懂多态的实现原理
【3】C++ 多态 超详细讲解
【4】[C++]:万字超详细讲解多态以及多态的实现原理(面试的必考的c++考点)
【5】CPU眼里的:多态
【6】C++语言面试中,如何深入理解虚函数和多态?
【7】侯捷谈虚函数与多态(上)
【8】侯捷谈虚函数与多态(下)

相关文章:

  • 操作系统OS是如何指挥外围设备的呢?
  • 量子加密通信:打造未来信息安全的“铜墙铁壁”
  • MySQL与分布式架构的碰撞
  • 开源飞控软件:推动无人机技术进步的引擎
  • 深入探讨宾馆一次性牙刷价格,市场价格区间差异大
  • 【Vue bug】:deep()失效
  • Chromium 134 编译指南 - Android 篇:从Linux版切换到Android版(六)
  • 对计网考研中的信道、传输时延、传播时延的理解
  • 【音视频】ffplay数据结构分析
  • 鸿蒙开发:如何解决软键盘弹出后的间距
  • 【大模型面试每日一题】Day 5:GQA vs MHA效率对比
  • 字符串格式漏洞-[第五空间2019 决赛]PWN5
  • 从请求到响应:初探spring web
  • react学习笔记4——React UI组件库与redux
  • 龙虎榜——20250430
  • 5G技术如何提升智能家居体验:让家更聪明,生活更智能
  • 航空客户价值分析阶段性测验
  • 跨域 iframe 内剪切板 Clipboard_API 报错
  • Google NotebookLM正式支持中文!AI笔记助手开启中文创作新纪元
  • Spark-小练试刀
  • 两部门发布“五一”假期全国森林草原火险形势预测
  • 郭向阳任广东省公安厅分管日常工作副厅长(正厅级)
  • 融创服务全面退出彰泰服务集团:约8.26亿元出售广西彰泰融创智慧80%股权
  • 广东省副省长刘红兵任湖南省委常委、宣传部部长
  • 秦洪看盘|上市公司业绩“排雷”近尾声,A股下行压力趋缓
  • 铁路五一假期运输今日启动,预计发送旅客1.44亿人次