类成员指针

来源:互联网 发布:有声阅读的软件 编辑:程序博客网 时间:2024/06/07 09:33

先看代码:

class Student{public:Student(int i, string nm):schoolNumber(i),name(nm){}void getInfo()const{cout<<"name: "<<name<<endl<<"SchoolNumber: "<<schoolNumber<<endl;}void setInfo(string nm, int id){name = nm;schoolNumber = id;}int schoolNumber;string name; };int main(){Student s1(001,"bird");Student* pStudent = &s1;string Student::* ps_Student = &Student::name;//定义类成员指针并初始化int Student::*pi_Student = &Student::schoolNumber;void (Student::*pf_Screen)()const = &Student::getInfo;//定义类成员函数指针并初始化void (Student::*pf_set_Screen)(string ,int) = &Student::setInfo;//使用类成员指针cout<<s1.*ps_Student<<endl;cout<<pStudent->*pi_Student<<endl;s1.getInfo();(s1.*pf_Screen)();(pStudent->*pf_Screen)();return 0;}

以前,我们都是这样使用指针的:把一个指向int的指针初始化为一个类的某个具体对象的int成员的地址:

int* p = &s1.schoolNumber;

但这里的思路变了:我们有一个指针,这个指针指向的是某个类中的int类型的成员,把这个指针初始化为某个int型的类成员的地址。

让我想通过这个指针访问这个类的某个具体对象的类成员(包括成员函数时),通过.*或者->*来完成。