C++成员变量指针及成员函数指针

1.成员变量指针

用法:

成员变量指针定义: 类型名(类名::*指针名) = &类名::类的成员变量名
成员变量指针调用: 对象名.*成员变量指针名

C++中指向成员变量的指针其实是一个相对于类的偏移量。如图:

#include<iostream>
using namespace std;
class A{
public:
     int x;
};
typedef int A::*MemberPointer;//整型的成员变量指针
int main(){
    MemberPointer pV;//定义一个成员变量指针pV
    pV = &A::x;//指向A类的变量x
    A a;
    a.*pV=1;//a.*pV可以理解为A的首地址+相对地址
    //等价于a.x==1
    cout<<a.*pV<<endl;
    cout<<(&a)->*pV<<endl;//&a为对象指针
    return 0;
}

2.成员函数指针

成员函数指针相当于成员变量指针与函数指针的组合。

用法:

成员函数指针定义: 类型名 (类名::*指针名)(参数类型表) = &类名::类的成员函数名
成员函数指针调用: (对象名.*成员函数指针名)(实参表)

 

#include<iostream>
using namespace std;
class Person{
public:
    void sayHello(){
        cout<<"Hello,I am a person."<<endl;
    }
};
typedef void (Person::*PersonMemberFunctionpointer)();//定义成员函数指针类型
int main(){
    Person someone;
    PersonMemberFunctionpointer pp;//声明一个成员函数指针
    pp = &Person::sayHello;//指向类成员sayHello()
    (someone.*pp)();//通过对象调用函数
    ((&someone)->*pp)();//通过对象指针调用函数
    return 0;
}

 

#include<iostream>
using namespace std;
class Person{
public:
    void sayHello(){
        cout<<"Hello,I am a person."<<endl;
    }
};
void runFuncName(Person *obj,void (Person::*func)()){
    (obj->*func)();
}
typedef void (Person::*PersonMemberFunctionpointer)();
int main(){
    Person someone;
    PersonMemberFunctionpointer pp;
    pp = &Person::sayHello;
    (someone.*pp)();
    runFuncName(&someone,pp);
    return 0;
}

 

posted @ 2017-04-18 21:48  奇热行  阅读(1918)  评论(0)    收藏  举报