类中的虚函数,通过指针获得vtable内容,然后通过函数指针指向虚函数并调用
2007-10-05 18:43
393 查看
#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;
}
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;
}
相关文章推荐
- C语言学习之 通过指向函数的指针 实现函数的调用
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?
- 浅析C++中的this指针 通过空指针(NULL)可以正确调用一些类的成员函数?
- C++中通过派生类调用第二基类的普通成员函数时this指针的调整
- 浅析C++中的this指针 通过空指针(NULL)可以正确调用一些类的成员函数?
- C/C++中为什么在类外利用多态基类指向派生类指针可以调用类的私有成员函数?
- 指向子类对象的基类指针调用非虚函数都是基类的函数吗
- Qt使用回调函数报错“函数调用缺少参数列表,请使用&xxx创建指向成员的指针”解决办法
- 编写一个程序,首先用opendir函数打开用户指定的目录,然后调用readdir函数读取该目录内容
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?
- 输入两个整数,然后让用户选择1或者2,选1是调用max函数,输出二者中大数,选2时调用min函数输出二者中的小数(指向函数的指针变量)
- 指向对象的指针的函数调用问题(含虚函数和纯虚函数知识)
- 函数调用缺少参数列表;请使用“&****Dlg::getThread”创建指向成员的指针”--多线程函数调用
- 根据输入的内容指向不同的函数,最后一次调用完成
- 通过指针调用C++中私有虚函数
- 通过操作指针,与指针做函数参数'实现字串在主串中出现的次数,然后将出现的部分按照要求进行替换
- 多态继承情况下,有一个基类指针指向派生类对象,如何用它调用基类的虚函数?
- 为什么通过空指针(NULL)可以正确调用一些类的成员函数?
- Inside VCL:接口指针调用函数的时候,如何获得对象指针以完成函数调用?
- 为什么通过空指针(NULL)可以正确调用一些类的成员函数?