|
|
发表于 2006-10-25 14:14:00
|
显示全部楼层
Re:成员函数指针的问题(看到那么多人提问题我也提一个)
看到那么多人在回答问题我也回答一个,补充
普通函数和类成员函数是两个完全不同的事情,即使进行强制类型转换也不行
成员函数带隐含式参数"this",静态成员函数不带隐含式参数"this".
class A{
public:
int f1(){...};
static int f2(){...}
int f3()const{..}
}a;
////////////////////////////////////
//普通成员函数
int (A::*pMF1)(); //函数指针定义
int (A::*pMF2)(); //函数指针定义
pMF1 = A::f1; //函数指针赋值
pMF2 = &A::f2; //函数指针赋值
//有些老的编译器可以通过没有&号的赋值方式,但标准C++强制要求加上&号
// 下不再重述
//使用
A* pA = &a;
(a.*pMF1)();(a.*pMF2)(); //调用
(pA->*pMF1)();(pA->*pMF2)();//调用
///////////////
///(静态成员函数)
int (*pF1)(); //函数指针定义
int (*pF2)(); //函数指针定义
int (*pF3)(); //函数指针定义
int (*pF4)(); //函数指针定义
pF1 = A::f1; //函数指针赋值
pF2 = &A::f1; //函数指针赋值
pF3 = a.f1; //函数指针赋值
pF4 = &a.f1; //函数指针赋值
//使用
pF1(); pF2();pF3(); //函数指针调用
///////////////////////
//CONST 成员函数
int (A::*pCMF1)()const;//定义
int (A::*pCMF2)()const;//定义
pCMF1 = A::f3;//赋值
pCMF2 = &A::f3;//赋值
//使用
(a.*pCMF1)();(a.*pCMF2)(); //调用
(pA->*pCMF1)();(pA->*pCMF2)(); //调用
|
|