成员指针
指向对象的成员的指针(pointer to member of object) a.*b
指向指针的成员的指针(pointer to member of pointer) a->*b
1,pointer to member of object,首先我们要知道,member of object指的是a.b。所以,这个pointer to member of object指的是,指向a.b的指针。
2,中文名字一般翻译的是,指向对象的成员的指针。这里面很奇怪的是,对象的成员是什么,是成员对象吗?对象的成员和成员对象有什么区别吗?一般来说,说对象的成员而不是成员对象,是因为这里指针指向的是一种成员的类型,而不是成员本身。
3,a.*b是不可以重载的,a->*b是可以重载的。
成员指针的使用
说起指向a.b的指针,那么,我们很容易想到&a.b,例如
#include <iostream>
using namespace std;
struct Student
{
int age;
};
int main()
{
Student s = {18};
int * p = &s.age;
cout << s.age << endl;
cout << *p << endl;
}
这是我们需要的吗?通过*p,就可以取得保存的a.b的值了,显然不是我们需要的成员指针。那么成员指针是什么呢?
#include <iostream>
using namespace std;
struct Student
{
int age;
};
int main()
{
Student s = {18};
// 定义的指针是一个指向成员类型的指针
// 并非是一个指向成员对象的指针
int Student::* p = &Student::age;
Student * ps = &s;
cout << s.*p << endl;
cout << ps->*p << endl;
}
因此,我们可以得到一个结论,a->*b等价于(*a).*b
点击查看全部c++教程???????
|