先看代码:
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型的类成员的地址。
让我想通过这个指针访问这个类的某个具体对象的类成员(包括成员函数时),通过.*或者->*来完成。