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

子类将基类的虚函数替换为其自己的虚函数,共用的一个虚函数表,怎么不影响基类

在 C++ 中,编译器会为每个类生成一个虚函数表,其中包含该类所有虚函数的地址。每个类对象都含有一个指向其虚函数表的指针,实际上,这个指针指向的是该类的虚函数表,也就是说,所有该类对象的虚函数指针指向该虚函数表。
在 C++ 继承机制中,派生类会继承基类的所有非私有成员,包括虚函数及其地址。如果派生类对虚函数进行了重新定义,那么它会生成一个新的子类虚函数表,并且把不同的虚函数地址填入其中,从而覆盖了基类虚函数表中对应的虚函数地址。
但实际上,派生类并没有直接改变基类的虚函数表,而是生成自己的一个子类虚函数表,所有的子类对象虚函数指针指向该子类虚函数表。所以,操作派生类对象不会污染基类的虚函数表,它们之间的虚函数是完全独立的。
如果通过基类指针调用虚函数,那么编译器会根据指针所指向的对象的类型来确定它要调用的虚函数的地址,这里涉及到虚函数的动态绑定问题。如果该指针指向一个派生类对象,那么派生类的虚函数地址就会被调用,而如果指向一个基类对象,那么基类的虚函数地址就会被调用,这个过程与实际的虚函数表是如何维护无关。


http://www.kler.cn/a/231587.html

相关文章:

  • 数据结构 队列
  • 【PyTorch】6.张量形状操作:在深度学习的 “魔方” 里,玩转张量形状
  • sem_wait的概念和使用案列
  • 快速分析LabVIEW主要特征进行判断
  • AI编译器之——为什么大模型需要Relax?
  • CTFSHOW-WEB入门-命令执行29-32
  • 【python】绘制春节烟花
  • 微信小程序(三十九)表单信息收集
  • Java项目使用jasypt加密和解密配置文件中关键信息
  • Pycharm中以chrome打开HTML文件报错: Windows找不到文件‘Chrome‘
  • 使用SM4国密加密算法对Spring Boot项目数据库连接信息以及yaml文件配置属性进行加密配置(读取时自动解密)
  • navigator.mediaDevices.getUserMedia获取本地音频/麦克权限并提示用户
  • 本地部署TeamCity打包发布GitLab管理的.NET Framework 4.5.2的web项目
  • 【Kubernetes】kubectl top pod 异常?
  • Lua迭代器以及各种源函数的实现
  • 从零开始手写mmo游戏从框架到爆炸(十一)— 注册与登录
  • Vuex介绍和使用
  • idea修改项目git地址
  • vue3:28— Vue 2 对 Vue 3 的所有非兼容性改变。(vue3学习笔记终)
  • 目标检测:2如何生成自己的数据集
  • MySQL重要进程
  • YOLOv7独家原创改进:大核卷积涨点系列| Shift-ConvNets,稀疏/移位操作让小卷积核也能达到大卷积核效果 | 2024年最新论文
  • 探讨CSDN等级制度:博客等级、原力等级、创作者等级
  • IntelliJ IDEA 2023.3发布,AI 助手出世,新特性杀麻了!!
  • 微软.NET6开发的C#特性——接口和属性
  • Nexus3之在Window中搭建Maven私服