c++中的多态的实现,主要通过虚函数表。
虚函数表的位置就是this指针的位置,是一个数组的形式。
可以不通过c++的标准方式调用成员函数,直接操作虚函数表的方式调用。
当然这种非标准的调用方式,没有办法获得标准的方式的效果,主要是由于this指针没有办法传递
可以从下面的代码可知
#include
using namespace std;
class Test{
public:
Test(){ this->mem=1;}
public:
int mem;
public:
virtual void fun1(){cout<<"Test:fun1() member mem value:"<mem<
virtual void fun2(){cout<<"Test:fun2() member mem value:"<mem<
virtual void fun3(){cout<<"Test:fun3() member mem value:"<mem<
};
typedef void (*Fun)(void);
int main(){
Test b;
Fun pFun = NULL;
cout<<"Vtable base addr:"<<(int*)(&b)<
//测试代码开始
pFun = (Fun)*( (int*)*(int*)(&b));
pFun();
pFun = (Fun)*( (int*)*(int*)(&b)+1);
pFun();
//测试代码结束
return 0;
}
还有另外一种更加明晰的测试方式
int ** pVtab = (int**)&b;
int i = 0;
for(;(Fun)pVtab[0][i] != NULL;i++)
{
pFun = (Fun)pVtab[0][i];
cout<<"["<
pFun();
}
阅读(1197) | 评论(1) | 转发(0) |