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

多态的原理

 

 有了虚函数,会在类的对象增加一个指针,该指针就是虚函数表指针_vfptr;虚表本质就是函数指针数组,虚表里面存放着该对象的虚函数的地址

派生类继承有虚函数基类的对象模型

子类继承父类的虚表指针时,是对父类的虚表指针进行了拷贝。二者指向两张不同的表。子类没有重写父类的虚函数时候,子类的虚函数表和父类是完全一样的。

如果子类重写了基类中某个虚函数,用派生类自己的虚函数地址覆盖虚表中的基类的虚函数地址。

派生类自己新增的虚函数按其在派生类中的声明次序增加到派生类虚表的最后。

多态的原理:基类的指针或者引用指向谁就去用谁的虚函数表找到对应的虚函数进行调用。

问题一:同一个类的不同对象的虚函数指针是否一样?虚函数表是否一样?

是一样的。它们的对象的虚函数指针都指向同一个虚表;虚函数指针都是一样的

问题二:虚表在哪个阶段生成虚表存放在哪?

虚函数我们知道存放在虚表,但是虚表存放在哪呢?其实存放在字符常量区。虚表在编译阶段就形成了。

注意:在C++中,内置类型的地址大小是相同的,无论在32位操作系统还是64位操作系统上都是如此.内置类型包括int、double、float、char、bool等常见的基本数据类型,它们的大小在不同的编译器和操作系统下可能略有不同,但它们的地址大小始终相同,通常是4个字节或8个字节.

在32位操作系统上,内置类型的地址通常是32位,也就是4个字节.而在64位操作系统上,内置类型的地址通常是64位(8个字节).这意味着在64位操作系统上,每个指针可以表示的内存地址范围比32位操作系统更大,因此可以更高效地操作大型数据结构.

http://www.lryc.cn/news/66089.html

相关文章:

  • RK3588平台开发系列讲解(内存篇)Linux 伙伴系统数据结构
  • Windows(MFC/C++)上进程间通讯的几种简单又实用的方法
  • 嘉兴桐乡会计考证培训-备考中级职称有必要报班吗?
  • java元注解和自定义注解的区别
  • 技术到底是什么
  • 什么CRM客户管理系统最好?
  • 吴军《计算之魂》读后感
  • CSS进阶
  • 金兰组织 | 2023金兰解决方案集经营管理篇正式发布
  • 【python】pytorch包:深度学习(序章)
  • HTML <acronym> 标签
  • python基本数据类型 - 字典集合
  • python数据类型总结
  • TS内置类型总结
  • Spring Cloud Alibaba: Gateway 网关过滤器 GatewayGatewayFilter factory (记录)
  • Windows Server 2016版本说明
  • 车载红外夜视「升温」
  • ext3 文件系统的特点、优缺点以及使用场景
  • rk3568 修改开机logo
  • golang实现关键路径算法
  • Overcoming catastrophic forgetting in neural networks
  • [Linux] Linux文件系统
  • 有仰拍相机和俯拍相机时,俯拍相机中心和吸嘴中心的标定
  • 【Vue学习笔记5】Vue3中的响应式:ref和reactive、watchEffect和watch
  • 自动化测试工具的基本原理以及应用场景
  • 《Java虚拟机学习》 java代码的运行过程
  • 关于Intel处理器架构中AVX2里Gather特性的说明
  • UNIX常用命令(C站最全,一文通关)
  • Vue监听属性详细讲解
  • 网申形式一览:这三种投递方式,你了解吗?