在网上找了很多类成员函数指针的例子,都不是很清晰
自己写一个吧
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
class MyClass
{
public:
MyClass();
~MyClass();
//当函数指针成员较多时,可以通过 typedef 简化代码
//typedef double (MyClass::*MemberFn)(int);
//MemberFn p1;
double (MyClass::*p1)(int); //指向本类成员函数的指针成员
double cal_m1(int lines);
double cal_m2(int lines);
double (MyClass::*estimate(int choose))(int); //返回值为本类成员函数指针的成员函数
};
MyClass::MyClass()
{
}
MyClass::~MyClass()
{
}
double MyClass::cal_m1(int lines)
{
return 0.05 * lines;
}
double MyClass::cal_m2(int lines)
{
return 0.5 * lines;
}
//这里两个MyClass::,第一个表示返回的是本类成员函数的指针,第二个表示这个函数是本类成员
double (MyClass::*MyClass::estimate(int choose))(int)
{
double(MyClass::*p1)(int) = NULL;
switch (choose)
{
case 1:
p1 = &MyClass::cal_m1;
break;
case 2:
p1 = &MyClass::cal_m2;
break;
}
return p1;
}
int main(int argc, char *argv[])
{
MyClass a;
a.p1 = a.estimate(1);
double b = ((a).*(a.p1))(10);
cout << b << endl;
return 0;
}