64,637
社区成员
发帖
与我相关
我的任务
分享
//楼主你的函数指针的定义是错误的
typedef void (*Fun)(void);
//应该这样定义
typedef void (__thiscall *Fun)(void*pThis);
//之所以同一个函数,他们的指针却不一样,是因为,函数里面需要对pThis进行指针调整.
//拿以下几个函数的对应的C形式的指针为例
virtual void Base::Iam(); //类型为void (__thiscall *IamBaseProxy)(Base*this);
virtual void BaseSec::Iam(); //类型为void (__thiscall *IamBaseSecProxy)(BaseSec*this);
virtual void Child::Iam(); //类型为void (__thiscall *IamChild)(Child*this);
//所以在Child对应的Base虚表里面,会存放一个代理函数,对应类型为Func1,
void __thiscall IamBaseSecProxy(BaseSec*this)
{
IamChild((Child*)this);
}
//在Child对应的BaseSec虚表里面,也会保存一个代理函数,对应类型为Func2
void __thiscall IamBaseProxy(Base*this)
{
IamChild((Child*)this);
}
class Base
{
public:
virtual void Iam()
{
cout < <"Base::Iam" < <endl;
}
virtual void FunBase()
{
cout < <"Base::FunBase" < <endl;
}
};
class BaseSec //这儿 没有继承 Base 所以 Iam() 是不一样的
{
public:
virtual void Iam()
{
cout < <"BaseSec::Iam" < <endl;
}
virtual void FunSec()
{
cout < <"BaseSec::FunSec" < <endl;
}
};