关于类的成员函数数组

    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个参数的函数”等错误。

posted @ 2011-01-18 11:49  mymeng_feng  阅读(1164)  评论(0编辑  收藏  举报