在網上找了很多類成員函數指針的例子,都不是很清晰
自己寫一個吧
#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;
}