1 操作符.*即成员指针运算符 (该运算符不支持重载)
之前讲过函数指针,你不可以像一个普通的函数指针那样指向一个成员函数,正确的做法应该是,你必须使用一个成员函数指针。一个成员函数的指针指向类中的一个成员函数,
定义:(typedef) 返回值类型 (类名::*函数指针名)(参数列表);
C++成员函数指针有一个可怕的限制:它们只能指向一个特定的类中的成员函数。对每一种参数的组合,需要有不同的成员函数指针类型,而且对每种使用const修饰的函数和不同类中的函数,也要有不同的函数指针类型。
若要调用成员函数指针,你需要先建立类的一个实例,并使用特殊操作符“.*”或者“->*”,这个操作符的优先级较低,你需要将其适当地放入圆括号内。
class A { public: int func(int x,int y) { printf("A::func:x=%d,y=%d/n",x,y); return (x<y?x:y); } }; typedef int (A::*p)(int,int);//指针名前一定要加上所属类型类名 A::的限定 int main() { p fun=A::func;//或者p fun=&A::func; A a; //因为成员函数地址的解引用必须要附驻与某个对象的地址,所以我们必须创建某个对象。 cout<<"min:"<<(a.*fun)(4,5)<<endl; return 0; }