当我学习到对象指针访问成员(包括成员变量和成员函数)时,遇到了易错的问题。总结下来。
首先是基本知识:
我们可以通过点操作符和箭头操作符两种方式来访问成员(包括成员变量和成员函数);
点操作符:通过对象(类类型的变量)访问成员函数,点操作符左侧为对象,右侧为成员(包括成员变量和成员函数)。
箭头操作符:通过指针访问成员函数,箭头操作符左侧为指针变量,右侧为成员(包括成员变量和成员函数)。
下面是遇到的易错问题:
首先定义一个类:class ClassX
{
public:
void setN(int N)
{
n = N;
}
int getN()
{
return n;
}
private:
int n;
};
再定义一个对象a:ClassX a;
再定义一个对象指针p:ClassX * p;
把a的地址赋值给对象指针变量p:p = &a;(也就是指针变量p指向对象a)
1.当用点操作符访问变量时可能会写成 * p.getN();
这样是错的, 错误的原因是操作符的优先级,点操作符的优先级高于星号操作符,所以 * p.getN()相当于是 * (p.getN()),即先进行p.getN(),再进行 * (p.getN())
而点操作符要求左侧为对象,右侧为成员(包括成员变量和成员函数),但这里左侧为p,p是指针变量,不是对象,所以会报错。
正确的写法为( * p).getN()。
2.使用箭头操作符访问成员的格式为:p->getN()。