#include <iostream>
using namespace std;
class Base1
{
public:
virtual void f() { cout << "Base1::f" << endl; }
virtual void g() { cout << "Base1::g" << endl; }
virtual void h() { cout << "Base1::h" << endl; }
};
class Derive : public Base1
{
public:
virtual void f1() { cout << "Derive::f1" << endl; }
virtual void g1() { cout << "Derive::g1" << endl; }
virtual void h1() { cout << "Derive::h1" << endl; }
};
typedef void(*Fun)(void);
int main()
{
Fun pFun = NULL;
Derive d;
int** pVtab = (int**)&d;
pFun = (Fun)pVtab[0][0];
pFun();
pFun = (Fun)pVtab[0][1];
pFun();
pFun = (Fun)pVtab[0][2];
pFun();
pFun = (Fun)pVtab[0][3];
pFun();
pFun = (Fun)pVtab[0][4];
pFun();
pFun = (Fun)pVtab[0][5];
pFun();
return 0;
}
运行如下:
监视中只有3个虚函数,但是输出的是6个,说明确实存在的,但是vs没有显示。如果vs真的是显示不全的话,有没有别的工具可以看见对象的模型的?
是的,显示不完全,需要用监视窗口手动显示虚表的所有内容。
(void**)0x65e8170c,10
更改上述表达式为你的虚表地址即可