代码演示:
#include <iostream>
using namespace std;
class base
{
public:
base(){cout<<"base构造了"<<endl;}
virtual void func()
{
cout<<"虚函数。。"<<endl;
}
virtual void func1()
{
cout<<"虚函数1。。"<<endl;
}
virtual void func2()
{
cout<<"虚函数2。。"<<endl;
}
int a;
int b;
};
int main(int argc, char const *argv[])
{
base tmp;
cout<<&tmp<<endl;
cout<<&tmp.a<<endl;
long long *p = (long long *) (*((long long*)(&tmp)));
cout<<p<<endl;
//利用虚表地址访问虚函数
typedef void(*Fun)(void);//重命名函数指针类型
Fun fun;//定义一个函数指针 fun
//保存虚函数的地址
fun = (Fun) *p;//强制类型转换为该函数指针类型
fun();//调用虚函数
fun = (Fun) *(p+1);
fun();
fun = (Fun) *(p+2);
fun();
return 0;
}