这代码有问题吧,我看根本无法运行。只知道第一个:
typedef void (__stdcall *PFUNC)();
定义函数指针PFUNC,对应的函数签名是,无参数,返回值为void后面看不明白,而且new了个A的对象,却没有delete。
typedef void (__stdcall *PFUNC)();
定义函数指针PFUNC,对应的函数签名是,无参数,返回值为void后面看不明白,而且new了个A的对象,却没有delete。
类型转换~空指针与PFUNC pFunc=(PFUNC)*(unsigned int*)pThis;
先讲指针pThis转换为(unsigned int*)无符号整型指针 然后指针取址后转换赋值为PFUNC类型
...
略,
代码是错误的,PFUNC pFunc=(PFUNC)*(unsigned int*)pThis;强制把A对象转换为PFUNC类型,然后以为该A对象指针指向的东西是其display函数,即pFunc = (PFUNC)*(unsigned int*)pFunc的用意,然后执行pFunc(); 以为能执行A::display,编写者犯了一个常识性错误,类的成员函数并不是作为数据包含在类对象的内存空间,new一个A对象,new出来的内存里面只包含A的成员数据,并不包含成员函数,因此不能达到目的。
加一个成员数据,PFUNC类型的指针,才能达到此目的:#include <iostream>
using namespace std;
typedef void (__stdcall *PFUNC)();//**********************解释 void display()
{
cout <<"In Class A" <<endl;
}class A
{
public:
PFUNC p;
A(){p = (PFUNC)display;}
}; int main()
{
void* pThis=new A();
PFUNC pFunc=(PFUNC)*(unsigned int*)pThis;//*********************************解释
pFunc();
return 1;
}
运行结果:In Class A,但是很遗憾,diaplay必须作为全局函数,不能作为A的成员函数。