虚函数表指针的问题
#include<iostream>
using namespace std;
class Base
{
public:
virtual void f() { cout << "Base::f" << endl; }
void g() { cout << "Base::g" << endl; }
virtual void h() { cout << "Base::h" << endl; }
private:
int n;
};
class Derive1 : public Base
{ // 重写一个虚函数
public:
virtual void f() { cout << "Derive1::f" << endl; }
// virtual void h() { cout << "Derive1::h" << endl; }
};
class Derive2 : public Base
{ // 重写两个虚函数
virtual void f() { cout << "Derive2::f" << endl; }
virtual void h() { cout << "Derive2::h" << endl; }
};
class Derive3 : public Base
{ // 重写两个函数,并增加一个虚函数
virtual void f() { cout << "Derive3::f" << endl; }
virtual void j() { cout << "Derive3::j" << endl; }
virtual void h() { cout << "Derive3::h" << endl; }
};
typedef void (*Func)(void);
int main()
{
Derive1 derive1;
Func pFun = NULL;
cout << "Derive1大小" << sizeof(Derive1) << endl;
int* pDeriveVtable = (int*)(*(int*)(&derive1));
cout << "虚表地址:" << pDeriveVtable << endl;
cout << "虚表第一项地址:" << (int*)(*pDeriveVtable) << endl;
cout << "虚表第一项调用输出:" << endl;
pFun = (Func)(*pDeriveVtable);
pFun();
cout << "下一个的地址:" << (int*)(*(pDeriveVtable + 1)) << endl;
cout << "下一个的调用输出:" << endl;
pFun = (Func)(*(pDeriveVtable + 1));
pFun();
cout << "再下一个是什么呢:" << (int*)(*(pDeriveVtable + 2)) << endl;
cout << "Derive1测试结束" << endl;
}