class Base
{
public:
Base():f_(0){}
virtual ~Base(){}
public:
typedef void (Base::*FUNC)();
void setf(FUNC f)
{
f_ = f;
}
FUNC getf()
{
return f_;
}
public:
FUNC f_;
};
class Derived:public Base
{
public:
void test1()
{
cout<<"Derived:Test1"<<endl;
}
void test2()
{
cout<<"Derived:Test2"<<endl;
}
};
如果定义一个类成员函数指针,在类外部(非类成员)
int main()
{
void (Derived::*Fun)();
Fun = &Derived::test1;
Derived obj;
(obj.*Fun)();
Derived *p = new Derived;
(p->*Fun)();
return 0;
}
如果定义一个类成员函数指针在类里面(类成员),可以这样调用
int main()
{
Base *p = new Derived;
p->setf(static_cast<Base::FUNC>(&Derived::test1));
(p->*(p->getf()))();
(p->*(p->f_))();//public
return 0;
}