多重继承的虚函数表

news2024/11/16 7:27:52

同一个类,不同对象使用同一张虚函数表

不同类使用不同的虚函数表

子类自己添加的虚函数(非重写),在VS中是将此放在第一个继承类的虚函数表里.
在这里插入图片描述

#include <iostream>
using namespace std;

class Father {
public:
	virtual void func1() { cout << "Father::func1" << endl; }
	virtual void func2() { cout << "Father::func2" << endl; }
	virtual void func3() { cout << "Father::func3" << endl; }
	void func4() { cout << "Father::func4" << endl;}

public:
	long long x = 1;
	long long y = 2;
	static int z;


};


class Mother{
public:
	virtual void handle1() { cout << "Mother::func1" << endl; }
	virtual void handle2() { cout << "Mother::func2" << endl; }
	virtual void handle3() { cout << "Mother::func3" << endl; }

public:
	int m = 3;
	int n = 4;
};

class Son :public Father,public Mother {
public:
	//重写了func1 ,增加了func5
	virtual void func1() override{ cout << "Son::func1" << endl; }
	virtual void handle1() { cout << "Son::handle2" << endl; }
	virtual void func5() { cout << "Son::func5" << endl; }
};

class  GrandSon :public Son {

};

typedef void(*func_t) (void);  //函数指针 返回类型void ,参数void
int Father::z = 1;
int main(void) {
	Son son;
	
	cout << "对象地址" <<(long long *)&son << endl;


	long long* vfptr1 = (long long*)*(long long*)&son;	//对象首地址,vfptr


	cout << "第一个虚函数表指针:" << vfptr1 << endl;

	for (int i = 0; i < 4; i++) {
		cout << "这是第" << i + 1 << "个虚函数" << endl;
		((func_t) * (vfptr1 + i))();
	}

	for (int i = 0; i < 2; i++) {
		cout << *(int *)((long long)&son + 8 + i * 4) << endl;	//值
	}
	
	long long* vfptr2 = (long long*) * ( (long long*)&son + 3);

	cout << "第二个虚函数表指针:" << vfptr2 << endl;

	for (int i = 0; i < 3; i++) {
		cout << "这是第" << i + 1 << "个虚函数" << endl;
		((func_t) * (vfptr2 + i))();
	}

	for (int i = 0; i < 2; i++) {
		cout << *(int*)((long long)&son + 32 + i * 4) << endl;	//值
	}


	system("pause");
	return 0;
}

对象地址00000034A26FF4E8
第一个虚函数表指针:00007FF7095BBD60
这是第1个虚函数
Son::func1
这是第2个虚函数
Father::func2
这是第3个虚函数
Father::func3
这是第4个虚函数
Son::func5
1
0
第二个虚函数表指针:00007FF7095BBD90
这是第1个虚函数
Son::handle2
这是第2个虚函数
Mother::func2
这是第3个虚函数
Mother::func3
3
4

有一个错误:Father的x,y,一开始定义成了int,老师解答,long long * + 3 是加3个 long long ,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/359172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3款强大到离谱电脑软件,都是效率神器,从此远离加班

闲话少说&#xff0c;直接上狠货。 1、ImageGlass ImageGlass是一款值得吹爆的电脑图片浏览工具&#xff0c;使用极其方便&#xff0c;体积50M左右&#xff0c;非常小巧&#xff0c;功能却强大到离谱&#xff0c;ImageGlass打开图片的速度极快&#xff0c;实现快速不同图像间切…

Flink-状态编程(Keyed State、Operator State、Broadcast State、状态持久化和状态后端)

文章目录状态编程Flink 中的状态有状态算子状态的分类按键分区状态&#xff08;Keyed State&#xff09;基本概念支持的结构类型使用基本代码实例-值状态&#xff08;ValueState&#xff09;实例-列表状态&#xff08;ListState&#xff09;实例-映射状态&#xff08;MapState&…

2023年湖北中级职称(工程类建筑类)报名条件和要求是什么?

2023年湖北中级职称&#xff08;工程类建筑类&#xff09;报名条件和要求是什么&#xff1f; 中级职称分为计算机类、医药类、卫生类、教师类、工程类、经济类等各大类&#xff0c;今天主要就是跟大家说一下工程类中级职称评审的一个条件和要求&#xff0c;这也是评职称人员应该…

ASEMI低压MOS管50N06S,50N06S图片,50N06S尺寸

编辑-Z ASEMI低压MOS管50N06S参数&#xff1a; 型号&#xff1a;50N06S 漏极-源极电压&#xff08;VDS&#xff09;&#xff1a;60V 栅源电压&#xff08;VGS&#xff09;&#xff1a;25V 漏极电流&#xff08;ID&#xff09;&#xff1a;50A 功耗&#xff08;PD&#xf…

面试一位软件测试6年工作者:一年经验掰成六年来用....

在众多面试中&#xff0c;对于那个工作了6年的面试者&#xff0c;我印象很深刻&#xff0c;因为最开始拿到简历的时候&#xff0c;我一摸:"这简历&#xff0c;好厚啊&#xff01;"再一看&#xff0c;工作6年。 于是我去找了我的领导&#xff0c;我说:“这人我应该没…

linux-rockchip-音频相关

一、查看当前配置声卡状态 cat /proc/asound/cards二、查看当前声卡工作状态 声卡分两种通道&#xff0c;一种是Capture、一种是Playback。Capture是输入通道&#xff0c;Playback是输出通道。例如pcm0p属于声卡输出通道&#xff0c;pcm0c属于声卡输入通道。 ls /proc/asoun…

分析现货黄金价格一般有什么方法

分析现货黄金价格一般有什么方法呢&#xff1f;我相信很多投资者都会说&#xff0c;是技术分析。很多人并不知道技术分析是什么&#xff0c;并且技术分析是如何去分析现货黄金价格的&#xff0c;那么本文就介绍一下技术分析的主要分类。可以说&#xff0c;小编的其他文章都是以…

ASE20N60-ASEMI的MOS管ASE20N60

编辑-Z ASE20N60在TO-247封装里的静态漏极源导通电阻&#xff08;RDS(ON)&#xff09;为0.4Ω&#xff0c;是一款N沟道高压MOS管。ASE20N60的最大脉冲正向电流ISM为80A&#xff0c;零栅极电压漏极电流(IDSS)为10uA&#xff0c;其工作时耐温度范围为-55~150摄氏度。ASE20N60功耗…

Linux知识之主机状态

1、查看系统资源占用 •可以通过top命令查看CPU、内存使用情况&#xff0c;类似Windows的任务管理器默认每5秒刷新一次&#xff0c;语法&#xff1a;直接输入top即可&#xff0c;按q或ctrl c退出 2、 top命令内容详解 •第一行&#xff1a;top&#xff1a;命令名称&#xff0…

群晖-第2章-设置HTTPS访问

群晖-第2章-设置HTTPS访问 本章介绍如何通过HTTPS访问群晖&#xff0c;前置要求是完成群晖-第1章-IPV6的DDNS中的内容&#xff0c;可以是IPV4也可以是IPV6&#xff0c;或者你有公网IP&#xff0c;直接添加DNS解析也可以。只要能通过域名访问到nas就行。 本文参考自群晖添加SS…

【汽车电子】A核与M核异构通信过程解析

一、 硬件层通信实现原理二、驱动层Virtio下RPMsg通信实现三、应用层双核通信实现方式 现在越来越多的产品具有M core和A core的异构架构&#xff0c;既能达到M核的实时要求&#xff0c;又能满足A核的生态和算力。比如NXP的i.MX8系列、瑞萨的RZ/G2L系列以及TI的AM62x系列等等。…

CSS基础教程

目录 css背景 1.background-color 2.透明度和不透明度 3.使用RGBA的透明度 css背景图片 css背景重复 ​编辑 1.background-repeat 2. background-repeat:no-repeat 3.background-position css背景附着 css边框 1.border-style 边框样式 2.border-width 边框宽度 4…

生物识别技术—景联文科技提供课堂行为采集、reID行为采集、驾驶员行为采集等全类型采集服务!

“随着生物识别技术逐步成熟&#xff0c;其识别准确率大幅提高&#xff0c;应用场景趋向复杂化、多样化&#xff0c;市场规模保持高速增长。据报道&#xff0c;市场研究机构Emergen Research最新发布的一份报告预测&#xff0c;到2027年&#xff0c;全球生物识别市场规模将接近…

MyBatis-Plus——代码生成器(3.5.1+版本)

文章目录配置数据源配置&#xff08;DataSource&#xff09;全局配置&#xff08;GlobalConfig&#xff09;包配置&#xff08;PackageConfig&#xff09;策略配置&#xff08;StrategyConfig&#xff09;模板引擎配置&#xff08;TemplateEngine&#xff09;代码生成器测试样例…

动手学深度学习(第二版)学习笔记 第二章

官网&#xff1a;http://zh.d2l.ai/ 视频可以去b站找 记录的是个人觉得不太熟的知识 第二章 预备知识 代码地址&#xff1a;d2l-zh/pytorch/chapter_preliminaries 2.1 数据操作 2.1. 数据操作 — 动手学深度学习 2.0.0 documentation 如果只想知道张量中元素的总数&#…

jenkins下载与简单使用

1.jenkins下载 因为我仍然使用的是jdk1.8进行开发&#xff0c;所以我下载的是jenkins2.332.1版本&#xff08;jenkins2.346.1版本在2022年末不再支持java8&#xff0c;如果项目使用的是jdk11可以继续使用该jenkins版本&#xff09;&#xff0c;更多版本下载请点击jenkins下载 …

企业级信息系统开发学习笔记1.3 初探Spring——利用注解配置类取代Spring配置文件

文章目录零、本讲学习目标一、课程引入二、利用注解配置类取代Spring配置文件&#xff08;一&#xff09;打开项目&#xff08;二&#xff09;创建新包&#xff08;三&#xff09;拷贝类与接口&#xff08;四&#xff09;创建注解配置类&#xff08;五&#xff09;创建测试类&a…

kubeadmd的部署+Dashboard+私有仓库

目录 一、kubeadm部署 1.1、环境准备 ​编辑 1.2、修改主机名 1.3、所有节点修改hosts文件 ​编辑 1.4、调整内核参数 1.5、参数生效 二、所有节点安装docker 三、所有节点安装kubeadm、kubelet和kubectl 四、 部署K8S集群 4.1、查看初始化需要的镜像 4.2、在 mas…

高压放大器在HIFU换能器和声场测量研究中的应用

实验名称&#xff1a;高压放大器在HIFU换能器和声场测量研究中的应用研究方向&#xff1a;医学超声测试目的&#xff1a;HIFU声场具有特殊的声场特性&#xff0c;要求用于声场检测的方法能够避免对声场造成干扰&#xff0c;同时避免高温高压和空化响应带来的冲击。目前报道的一…

音视频基本概念之物理音频和数字音频

一&#xff1a;物理音频初中物理知识 这里列举一些重要的可能和编码相关的重要物理知识 声音的频率是周期的倒数&#xff0c;它表示的是声音在1秒钟内的周期数&#xff0c;单位是赫兹(Hz)。千赫(kHz),即1000Hz,表示每秒振动1000次。声音按频率可作如下划分: 次声 0&#xff5…