關于類的成員函數數組
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個參數的函數”等錯誤。

浙公網安備 33010602011771號