记录一下C++的虚表

记录一下C++的虚表

虚表,就是一连串指向虚函数的函数地址指针。

实验说明,虚表占据大小和一个(LPVOID)大小是一样的。

32位为4字节,64位为8字节。

代码:

#include<iostream>
#include<windows.h>
using namespace std;
class A{
	int num;
};
class B{
public:
	int num;
	virtual void print1()
	{
		cout<<"this is b.print1\n"; 
	}
	virtual void print2()
	{
		cout<<"this is b.print2\n";
	}
};
class C:public B{
public:
	int num2;
	virtual void print2()
	{
		cout<<"this is c.print2\n";
	}
};
int main()
{
	cout<<"类A的大小 = "<<sizeof(A)<<endl;
	cout<<"类B的大小 = "<<sizeof(B)<<endl;
	cout<<"类C的大小 = "<<sizeof(C)<<endl;
	B* b = new C;
	b->print2();
	printf("C的虚表地址 0x%X\n",*(long*)b);
	free(b);
	b = new B;
	b->print2();
	printf("B的虚表地址 0x%X\n",*(long*)b);
	while(1);
}

输出:
image
image

因为继承的关系,B类和C类的一个虚函数地址是一样的。

再看下函数的具体内容。
image
image

可见,确确实实,有虚函数的类,确实由一个虚表,指向虚函数的地址数组。

posted @   念秋  阅读(65)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示