今天在分析老师上课讲的成员变量指针的代码时,遇到了一些问题,下面是通过查找资料进行的一些整理
1 成员指针是什么?
形象来说,成员指针就是在一个对象内部定位某一个成员的方式。
2 如何定义一个成员指针呢‘
class A{
public:
int x;
int y;
};
对于这个类A,我们定义它的成员x的指针
int A::*p=&A::x 其中int根据x变量的数据类型来确定。
那么A a; a.*p的作用就等价于a.x了
3 关于存在继承的情况
class B:public A{
public:
int z;
};
那么下面代码的执行
int A::*p=&A::x;
int B::*q=&B::x;
A a={20,30}
B b;
b.x=21;
b.y=31;
cout<<a.*p<<endl; //20
cout<<b.*p<<endl; //21
cout<<a.*q<<endl; //错误操作
cout<<b.*q<<endl; //21
p=&B::x; //可行且值仍为&A::x
p=&B::z; //无法将'int B::*'转为'int A::*'
q=&A::x; //可行且值为&A::x
我们可以知道 1无法在父类中使用子类的成员指针 2 只要是指向父类成员的指针,其值一直为A::
4 关于成员函数指针
与成员变量的使用类似
void (A::*pFun)()=&A::fun;
(a.*pFun)();//这样我们就可以使用类A中的成员函数了。