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

【C/C++ 多态中的虚函数的虚函数表】详细的了解一下吧(要先知道有虚函数表

多态是面向对象程序设计中的一个重要特性,它允许不同类的对象对同一消息作出响应。在C++中,多态的实现主要依赖于虚函数和虚函数表。以下是对多态中虚函数表的详细描述:

一、虚函数表的概念

虚函数表(Virtual Function Table,简称VTable)是C++中用于支持多态性的一个关键机制。当一个类中包含虚函数时,编译器会为该类生成一个虚函数表,该表包含了指向类中所有虚函数的指针。每个包含虚函数的类的对象都会包含一个指向其所属类的虚函数表的指针(通常称为vptr)。

二、虚函数表的特点

  1. 静态性:虚函数表是在编译时确定的,属于类而不属于某个具体的实例。因此,同一类的所有实例都共享同一个虚函数表。
  2. 动态性:虽然虚函数表本身在编译时确定,但虚函数的调用是动态的,即在运行时根据对象的实际类型来确定调用哪个函数。
  3. 继承性:在继承关系中,如果基类有虚函数,那么派生类也会有自己的虚函数表(除非派生类没有重写任何基类的虚函数,此时派生类的虚函数表与基类的相同)。派生类的虚函数表会包含基类的虚函数指针(如果派生类没有重写这些函数)以及派生类自己定义的虚函数指针。

三、虚函数表的作用

虚函数表的主要作用是支持多态性。通过虚函数表,基类指针或引用可以指向派生类对象,并调用派生类中重写的虚函数,从而实现动态绑定。这种机制使得在不知道对象具体类型的情况下,可以调用对象的成员函数,并根据对象的实际类型执行相应的函数体。

四、虚函数表的实现细节

  1. 虚函数表指针(vptr):每个包含虚函数的类的对象都会在其内部存储一个指向虚函数表的指针(vptr)。这个指针通常位于对象的内存布局的最前面(但这不是C++标准规定的,具体实现可能因编译器而异)。
  2. 虚函数表(VTable):虚函数表是一个包含函数指针的数组,每个函数指针指向类中的一个虚函数。虚函数表的顺序和类中虚函数的声明顺序有关(但这也可能因编译器而异)。
  3. 构造函数和析构函数:构造函数和析构函数通常不是虚函数,因为构造函数用于初始化对象,而析构函数用于清理对象,它们在对象生命周期的特定阶段被调用,不需要多态性。然而,在某些情况下(如需要通过基类指针删除派生类对象时),可以将析构函数声明为虚函数。

五、示例

假设有以下类结构:

class Base {  
public:  virtual void func1(

相关文章:

【C/C++ 多态中的虚函数的虚函数表】详细的了解一下吧(要先知道有虚函数表

多态是面向对象程序设计中的一个重要特性,它允许不同类的对象对同一消息作出响应。在C++中,多态的实现主要依赖于虚函数和虚函数表。以下是对多态中虚函数表的详细描述: 一、虚函数表的概念 虚函数表(Virtual Function Table,简称VTable)是C++中用于支持多态性的一个关…...

基于树莓派4B设计的智能家居控制系统(阿里云IOT)(203)

文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】设计实现的功能【3】项目硬件模块组成1.2 设计思路1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献1.4 开发工具的选择【1】设备端开发【2】上位机开发1.5 系统框架图1.6 系统功能总结1.7 系统原理图1.8 硬件…...

太阳能光伏气象站的功能优势

太阳能光伏气象站为光伏产业的智能化、高效化发展提供了强有力的支持。 首先,该气象站能够全面采集多种关键气象要素,包括太阳倾斜辐射、日照时数、太阳总辐射、直接辐射、散射辐射等太阳辐射数据,以及风速、风向、百叶盒温湿度、大气压力、…...

LVS(Linux Virtual Server)负载均衡详解

一、LVS简介与集群概念 1. LVS(Linux Virtual Server) 即Linux虚拟服务器,是一个高性能、高可用的服务器集群解决方案,现已集成至Linux内核中。它通过IP虚拟化技术通过将网络流量分散到多个服务器上,从而提高网络服务…...

C语言 | Leetcode C语言题解之第329题矩阵中的最长递增路径

题目: 题解: const int dirs[4][2] {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; int rows, columns;typedef struct point {int x, y; } point;int longestIncreasingPath(int** matrix, int matrixSize, int* matrixColSize) {if (matrixSize 0 || matrixC…...

rabbitmq学习记录

同步和异步 (1)同步(按照流程一步一步做)使用openfengin传统的交互 响应时间长,需要将每一步的时间加起来。如果一个环境出错了,整个就报错了。并发压力大,前边的步骤有多大的并发量&#xff…...

MySQL数据库基础:约束

💎我的主页:MySQL 💎1. 约束的概述 约束是作用于表中字段的规则,用于限制存储在表中的数据 目的:保证数据库中数据的正确性,有效性和完整性 💎2. 约束的分类 💎2.1 非空约束 非空…...

Java设计模式和AOP编程

Java 六大设计原则;Java 23种设计模式(在此介绍三种设计模式) Java设计模式 单例模式 应用场景:spring中bean的作用域用的就是单例模式 //基本的单例模式————懒汉式 public class student {//3.创建static修饰的成员变量p…...

【扒代码】data.py

数据增强函数 import torch from torchvision.transforms import functional as TVFdef tiling_augmentation(img, bboxes, density_map, resize, jitter, tile_size, hflip_p):# 定义一个辅助函数,用于根据给定的概率水平翻转张量def apply_hflip(tensor, apply)…...

【时时三省】unity test 测试框架 介绍(适用于C语言进行测试的)

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 目录 1,关于 unity test 测试框架的介绍 2,测试框架关于源码的介绍 3,使用unity test测试C代码 4,常用断言举例 1,关于 unity test 测试框架的介绍 unity test 是 ThrowTheSwitch.org 的一个主要工程。它…...

那些你应该掌握的linux命令

一、路径授权 要给 a 用户 b 路径的所有操作权限,可以使用以下命令: sudo chown -R a:a /b sudo chmod -R 770 /b1.sudo chown -R a:a /b chown 命令用于更改文件或目录的所有者和所属组。-R 选项表示递归地应用于目录及其内部的所有文件和子目录。a:a 表示将所有…...

系统出现高CPU可能风险因素整理

文章目录 死循环无限递归序列化加解密正则表达式计算密集型任务大流量Full GC资源竞争/死锁I/O阻塞外部接口调用 死循环 死循环是最常见的原因之一。当代码中存在无穷循环(例如在多线程环境下的HashMap线程不安全问题或分页查询条件不明确导致的无限循环&#xff0…...

前端技术 -- 动画效果之GSAP作用与使用示例

GSAP(GreenSock Animation Platform)简介 GSAP 是一个高性能、跨平台的 JavaScript 动画库,广泛用于网页动画的制作。它提供了丰富的 API,使得开发者可以轻松创建复杂的动画效果,并且在不同浏览器和设备上都能获得一致…...

C口一拖二数据线:解锁数字生活的便捷新篇章LDR6020

添加图片注释,不超过 140 字(可选) 在科技日新月异的今天,我们的电子设备如同生活中的伴侣,无论是工作、学习还是娱乐,都离不开它们的陪伴。随着Type-C接口逐渐成为众多高端智能手机、平板电脑、笔记本电脑…...

CH07_数据绑定

第7章:数据绑定 本章目标 理解路由事件 掌握键盘输入事件 掌握鼠标输入事件 掌握多点触控输入事件 数据绑定概述 什么是数据绑定 ​ 将WPF中的至少一个带有依赖项属性的两个对象的两个属性进行绑定,使某一个依赖项属性可以更新和它绑定的属性的功…...

24.python基础(8.8)

python基础 1.搭建环境python3 1.查看是否有安装python [rootpython1 ~]# yum list installed |grep python 2.安装python3 [rootpython1 ~]#yum -y install python3 [rootpython1 ~]#python --version #查看版本信息 最新安装3.12,可以使用源码安装 开…...

【论文阅读】MobileNetV4 - Universal Models for the Mobile Ecosystem

文章目录 摘要一、介绍二、相关工作三、与硬件无关的帕累托效率四、通用倒置瓶颈五、移动MQA六、MNv4模型的设计6.1 为增强的体系结构改进NAS6.2 MNv4模型的优化 7. 结果7.1 ImageNet分类7.2 COCO目标检测 8. 强化蒸馏配方9. 结论 MobileNetV4 - 移动生态系统的通用模型 摘要 …...

大模型日报 2024-08-07

大模型日报 2024-08-07 大模型资讯 [Figure AI 把「终结者」造出来了] 简介:Figure 发布新一代人形机器人 Figure 02,具多种功能,能实时对话、自主执行任务,导航用 VLM,电池续航提升,机械手先进&#xff0c…...

区块链ddos防护怎么做

区块链ddos防护怎么做?在区块链这一新兴技术的浪潮中,我们见证了无数创新应用的诞生与繁荣。然而,在这片充满机遇的蓝海中,也潜藏着不容忽视的暗流——分布式拒绝服务攻击(DDoS)。DDoS攻击,如同网络世界的…...

在Linux中认识pthread库

int *pnullptr; pnullptr; *pnullptr; 指针变量做右值也是变量拥有空间。去承装数据。 *p代表指针所指向的空间,及0号地址,及往虚拟地址的0号地址处写8个字节的数据,全部写为0. (此操作不允许) 进程和线程的关系如…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

在rocky linux 9.5上在线安装 docker

前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...