第一种方法
#include <iostream>
using namespace std;
class A {
public:
int add(int x,int y) const { return x+y; }
int sub(int x,int y) const {return x-y;}
};
int main()
{
// typedef int (A::*PFUN)(int,int) const ;
// PFUN pfun= &A::add;
int (A::*pfun)(int,int) const = &A::add;
A *a = new A;
cout<< (a->*pfun)(3,4) <<endl;
pfun = &A::sub;
cout<< (a->*pfun)(3,4) <<endl;
delete a;
return 0;
}
第二种方法
#include <iostream>
using namespace std;
class A {
typedef int (A::*PFUNC)(int,int) const;
public:
int add(int x,int y) const { return x+y; }
int sub(int x,int y) const {return x-y;}
void set_pfunc( PFUNC pf ) { pfunc= pf; }
PFUNC get_pfunc() const { return pfunc;}
/*
int call(int x,int y) const {
return (this->*pf)(x,y);
}
*/
PFUNC pf;
private:
PFUNC pfunc;
};
int main()
{
A *a = new A;
a->set_pfunc( &A::add );
cout<<(a->*(a->get_pfunc()))(3,4);
a->pf = &A::add;
cout<<(a->*(a->pf))(3,4)<<endl;
// cout<< a->call(3,4) <<endl;
delete a;
return 0;
}
派生类如果要使用基类的函数指针,则需要使用static_cast进行转换。