写 C++ 的时候,有一个 Point 类是这么写的,重点在于 distance 函数:
class Point {
private:
double x = 0, y = 0;
public :
//为了减少篇幅,格式比较简陋。
Point (double x = 0, double y = 0) { this->x = x; this->y = y; }
void setPoint (double x, double y) { this->x = x; this->y = y; }
double getX () { return x; }
double getY () { return y; }
double distance( Point p ) {
return sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
}
....
};
按理讲,Point 类的 x, y 变量是私有变量,这两个变量的值应该只能由 p.getX() 和 p.getY() 来返回吧?为什么能通过点运算符直接访问?
在搜索的过程中,我发现了几条信息:
私有成员只能被本类的成员函数访问。
成员函数:描述类的行为。
在类的外部只能访问到类的共有成员;在类的成员函数中,可以访问到类的全部成员。
最重要的是在书上(《C++语言程序设计》第四版,4.2.4 节)查到的内容:
以开篇的代码为例,解释一下目的对象。
当我们调用 getX() 方法,我们一定需要告诉机器,我们需要获得的是谁的 x 值。此我们实例化了一个对象 point,Point point(1,3) ,好了,现在有了对象,然后用”.”运算符将他们链接起来:point.getX(),此时的 point 就是目的对象。
若是调用一个普通的函数,比如
int add(int a, int b) { return a+b; }
就不需要使用”.”运算符,直接调用就行了。
知道了目的函数是什么,剩下的就好理解了,我就不多写了。
在类的成员函数中,可以使用变量名直接访问目的对象的私有变量。但需要使用 “.” 运算符来访问,与目的对象属于同一个类的,其他对象的私有变量。所以在 distance 方法中的 p 对象的私有变量是可以直接通过”.” 运算符获得的,因为 p 对象是当前 Point 类的对象。
总结:在类的成员函数中可以访问同类实例对象的私有成员变量。