64,648
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
class Base
{
public:
Base(int a, int b, int c) : i(a), j(b), k(c) {}
virtual void f() { cout << "第一个函数, i = " << i << endl; }
virtual void g() { cout << "第二个函数, j = " << j << endl; }
virtual void h() { cout << "第三个函数, k = " << k << endl; }
private:
int i, j, k;
};
typedef void (__fastcall *Fun)(Base const *);
int main(int argc, char *argv[])
{
Base b(33, 66, 99);
Fun pFun = NULL;
cout << "虚函数表地址:" << (int *)(&b) << endl;
cout << "虚函数表 — 第一个函数地址:" << (int *)*(int *)(&b) << endl;
pFun = (Fun)*((int *)*(int *)(&b));
pFun(&b);
cout << "虚函数表 — 第二个函数地址:" << (int *)*(int *)(&b) + 1 << endl;
pFun = (Fun)*((int *)*(int *)(&b) + 1);
pFun(&b);
cout << "虚函数表 — 第三个函数地址:" << (int *)*(int *)(&b) + 2 << endl;
pFun = (Fun)*((int *)*(int *)(&b) + 2);
pFun(&b);
}