关于类的成员函数数组
C++类的成员函数数组声明与使用与普通的函数数组稍有不同:
首先谈谈声明
1.数组声明:int Fun[MAX_LEN];//包含MAX_LEN个int类型元素的int型数组
2.指针数组:int *Fun[MAX_LEN];//函数名其实为函数的入口地址,可以理解为指向函数所占用内存的指针,所以数组需声明为指针数组
3.函数数组:int (*Fun[MAX_LEN])(int, int);//函数指针数组,与普通函数指针数组相同
4.成员函数数组:int (ClassName::*Fun[MAX_LEN])(int, int);//ClassName为类名,声明类的成员函数指针数组必须在此加上作用域限定符,不然编译时会报出一堆如:”无法从int (__thiscall ClassName::*)(int, int)转换为int (__cdecl *)(int, int)”的错误
现在声明就完成了。再说说使用
一般在类的构造函数中将对数组进行初始化,初始化只要注意一点就可以了。如在ClassName类中有成员函数int Add(int, int); 现将此函数放入数组中须照此:Fun[0] = &ClassName::Add; 如此处不添加作用域限定符编译将会给出如:“绑定成员函数表达式上的非法操作”的错误。
调用:调用函数数组时须加上this-> 如 int sum = (this->*Fun[0])(2, 3);不然编译会报出如:“..操作数非法”“项不会计算为接受2个参数的函数”等错误。