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