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;
}

 

posted on 2014-08-15 15:05  Yogurshine  阅读(1959)  评论(0编辑  收藏  举报