///实现一个类成员函数指针的数组,看下面的代码,另外要注意的静态数组成员可以在类内不声明数组大小
class CMyMath
{
public:
int Add(int a, int b);
int Sub(int a, int b);
///MathArr 是一个数组,数组存放的是指针,指针是函数指针
///函数是 CMyMath 的类成员函数
///所以 MathArr 是一个存放 CMyMath 的类成员函数指针的数组
static int (CMyMath::*MathArr[])(int, int);
int Calc(void);
};
///数组的实现
int (CMyMath::*(CMyMath::MathArr[]))(int, int) =
{
&CMyMath::Add,
&CMyMath::Sub,
NULL,
};
int CMyMath::Add(int a, int b)
{
return a+b;
}
int CMyMath::Sub(int a, int b)
{
return a-b;
}
int CMyMath::Calc()
{
///类内调用,类外调用是直接调用
return (this->*MathArr[0])(10, 30);
}
CMyMath math;
///类内调用
int c = math.Calc();
///类外调用,因为函数是类内的函数,所以在调用它的指针前要加上类的变量名 math
c = (math.*(CMyMath::MathArr[1]))(50, 9);