王桂林讲C++之指向类成员指针
对于普通变量或普通函数,我们可以使用一个指针指向它,然后很方便的通过指针调用它。例如,
//变量指针
string str = "china";
string *ps = &str;
cout<< *ps <<endl; //运行结果:china
//函数指针
void func(int a)
{
cout<< "func(int a) = " << a <<endl;
}
void (*pf)(int a) = func;
cout<< (*pf)(1) <<endl; //运行结果:func(int a) = 1
那么对于类成员变量和类成员函数呢,是否也可以用指针指向它们?答案是肯定的。
下面用一个例子来说明:
//main.cpp
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
A(string str = "china", int y = 15):
str(str),y(y)
{
}
string str;
int y;
void func()
{
cout<< str << y <<endl;
}
private:
};
int main()
{
//成员变量
string A::*ps = &A::str; //与普通变量相比,在变量名前增加了类限定符A::
A a;
cout<< a.*ps <<endl;
A *p = new A;
p->*ps = "beijing";
cout<< p->*ps <<endl;
cout<< "---------------" <<endl;
//成员函数
void (A::*pf)() = &A::func;
A b;
(b.*pf)();
system("pause");
return 0;
}
运行结果如下,
china
beijing
---------------
china15
说明:1. 指向类成员指针是针对类来说的,与对象无关。它的实质其实就是,指针保存了成员变量在类地址中的偏移值;
2. int *p = &a.y 这种不属于类成员指针,只是普通变量指针,因为它只是单单指向对象a中的成员y。