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

C++之虚函数原理

对象数据和函数的存储方式

注意说的是对象

C++中的对象存储方式是

 每个对象占用的存储空间只是该对象的数据部分(虚函数指针和虚基类指针也属于数据部分),函数属于公共部分。

 虚函数表

虚函数是通过虚函数表实现的。

C++实现虚函数的方法是:为每个类对象添加一个隐藏成员,隐藏成员保存了一个指针,这个指针叫虚表指针(vptr),它指向一个虚函数表(virtual function table, vtbl)

虚函数表存放的是一个虚函数的地址(可以理解为数组里存放着指向每个虚函数的指针)

即:每个使用一个虚函数表,每个类对象用一个虚表指针

基类对象包含一个虚表指针,指向基类的虚函数表
派生类对象也将包含一个虚表指针,指向派生类虚函数表

  • 如果派生类重写了基类的虚方法,该派生类虚函数表将保存重写的虚函数的地址,而不是基类的虚函数地址
  • 如果基类中的虚方法没有在派生类中重写,那么派生类将继承基类中的虚方法,而且派生类中虚函数表将保存基类中未被重写的虚函数的地址,但如果派生类中定义了新的虚方法,则该虚函数的地址也将被添加到派生类虚函数表中
http://www.lryc.cn/news/66474.html

相关文章:

  • Windows Information Protection(WIP)部署方案
  • 细说Hibernate的缓存机制
  • 初识C++之线程库
  • ChatGLM-LLaMA-chinese-insturct 学习记录(含LoRA的源码理解)
  • JuiceFS-K8s部署
  • 2023最新版本Camtasia电脑录屏软件好不好用?
  • 第三章 Linux 初步
  • linux环境安装使用mysql详解
  • SUNTANS模型学习(9)——学习Tidal forcing算例
  • ​力扣解法汇总1010. 总持续时间可被 60 整除的歌曲
  • 利用老毛桃pe启动U盘启动ubuntu.iso,完成ubuntu系统的安装
  • 分享2个教学视频录制的方法!
  • 「SQL面试题库」 No_63 报告的记录 II
  • 【事务】怎么去理解事务?
  • camunda流程变量如何使用
  • CMIP6:WRF模式动力降尺度、单点降尺度、统计方法区域降尺度
  • 2023建筑设计师们有哪些好用的AI设计工具?
  • mysql主从复制与读写分离
  • 技术控,看这里,一款支持断点调试的数据科学工具
  • 论文导读 | 大语言模型上的精调策略
  • 进阶自动化测试,这3点你一定要知道的...
  • 网络编程套接字API
  • 数字藏品的价值和意义
  • Unity物理系统脚本编程(上)
  • Java基础(十七)File类与IO流
  • 跑步课程导入能力,助力科学训练
  • MySQL---8、创建和管理表
  • 图像分类简单介绍
  • 很多博主用Markdown格式文章?直呼真不错!
  • 【2023/05/07】汇编语言