64,282
社区成员
发帖
与我相关
我的任务
分享
class Event
{
public:
};
class MouseEvent:public Event
{
public:
};
class BaseClass;
typedef void (BaseClass::*ThisCall)(Event&);
typedef void (*Cdecl)(Event&);
struct question
{
ThisCall pfnThisCall;
Cdecl pfnCdecl;
};
class BaseClass
{
protected:
public:
void GiveMeFunction( ThisCall func )
{
Event e;
(this->*func)(e);
}
virtual void vir(Event&)
{
printf("vir base\r\n");
}
};
class SClass :public BaseClass
{
public:
void GiveMeFunction( void (SClass::*func)(MouseEvent&))
{
BaseClass::GiveMeFunction( (ThisCall)func );
}
virtual void vir(MouseEvent&)
{
printf("vir SClass\r\n");
}
};
int _tmain(int argc, _TCHAR* argv[])
{
SClass s;
s.GiveMeFunction(&SClass::vir);
return 0;
}
struct question
{
// ThisCall pfnThisCall;
Cdecl pfnCdecl;
};
#include<stdio.h>
#include<iostream>
using std::cout;
using std::endl;
class Event
{
public:
};
class MouseEvent:public Event
{
public:
};
class BaseClass;
typedef void (BaseClass::*ThisCall)(Event&);
typedef void (*Cdecl)(Event&);
class BaseClass
{
protected:
public:
void GiveMeFunction( )
{
Event e;
this->vir(e);
}
virtual void vir(Event&)
{
printf("vir base\r\n");
}
};
class SClass :public BaseClass
{
public:
virtual void vir(Event&)
{
printf("vir SClass\r\n");
}
};
int main(int argc, char* argv[])
{
SClass s;
s.GiveMeFunction();
return 0;
}
还有就是,在你的 SClass类中的vir函数并没有覆盖你的父类中的vir,因为他们两个的形参不一样,他们两个是两个函数,只不过在子类中屏蔽了父类中的哪个虚函数。