benny5609的专栏

人生,到世上走一遭,只不过是单纯的体验与学习认识,当我们在临死的时候,可以光荣地对自己说:"我已领略过"便不枉此生。...

类中的虚函数,通过指针获得vtable内容,然后通过函数指针指向虚函数并调用

#include "stdafx.h"

class A
{
 virtual void FunA(){ printf( "liangchao/r/n" ); }
 virtual void FunB(){ printf( "liangchao1/r/n" ); }
};

typedef void (*pFunA)();

int _tmain(int argc, _TCHAR* argv[])
{
 A a;
 pFunA pfunA, pfunB;

 int p = (int)(&a);
 int i = *( (int*)p );//i是指向vtable的指针
 i = *((int*)i);//i是函数FunA的地址

 int j = *( (int*)p );
 j = j +4;
 j = *((int*)j);//i是函数FunA的地址

 //void *q = (void*)(*p);
 pfunA = (void (*)())( i );
 pfunB = (void (*)())( j );
 pfunA();
 pfunB();
 return 0;
}

 
阅读更多
文章标签: include class
个人分类: C/C++
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

类中的虚函数,通过指针获得vtable内容,然后通过函数指针指向虚函数并调用

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭