记录一下C++的虚表


记录一下C++的虚表

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

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

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

代码:

#include
#include
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的大小 = "<print2();
	printf("B的虚表地址 0x%X\n",*(long*)b);
	while(1);
}

输出:

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

再看下函数的具体内容。

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

相关