虚函数表的存放

C++中虚函数表是专门存在一个位置上的,而在实例的首地址存储的即为虚函数表的地址。

所以如果类A拥有虚函数(一个或者多个),其实例的大小都会多增加4个字节,用于存储虚函数表地址。

如果类B不存在虚函数,则其会按默认顺序存储成员变量的值。例如以下例子:

#include <stdio.h>

struct TestClass
{
	TestClass()
	{
		value = 10;
	}
	int value;
};

int main()
{
	TestClass temp;
	printf("%d\n",*(int*)(&temp));
} 

其输出的就是temp的value值10。而如果TestClass中存在虚函数时,其值输出则为虚函数表的地址了。

另外一提的是,目前还未找到在程序中判断某个类A中是否含有虚函数的方法。

猜你喜欢

转载自blog.csdn.net/Vis_Stu/article/details/79921286