#include <iostream>
using namespace std;
//每个类的虚表都不同
//只要包含了虚函数,则这个类就有一个独立于其它类的虚表
//虚标存在于可执行文件中,Linux下执行时被加载到内存.rodata段中,这个段就是C++中的常量区
class A
{
public:
virtual void f1()
{
cout << "The Virtual Function of A" << endl;
}
};
class B :public A
{
public:
void f1()
{
cout << "The Virtual Function of B" << endl;
}
};
int main()
{
cout << sizeof(A) << endl;
cout << sizeof(B) << endl;
A a;//a的内容即为指向A的虚表的指针变量的内容
B b;
cout << sizeof(a) << endl;
cout << sizeof(b) << endl;
int aVtAddr = *((int*)&a);//A中虚表的地址
int bVtAddr = *((int*)&b);//B中虚表的地址
printf("0x%08X\n", aVtAddr);
printf("0x%08X\n", bVtAddr);
return 0;
}
C++类的虚表
最新推荐文章于 2022-06-09 23:25:49 发布