1、什么是友元?
友元,更多的表征的是一种关系,这种关系可以发生在全局函数和某个类之间,也可以发生在类和类之间
通俗来说,
* 友元发生在全局函数和某个类之间时:如果我们将一个普通的全局函数声明成为了某个类的友元函数,则该函数则可以无限制(不受访问级别属性的限制)的访问类中的所有成员变量(当然,这种特性的出现,毫无疑问的破坏了我们现有类的封装性,因此,在实际的工程项目中,我们一定要慎用友元)
* 友元发生在类和类之间时:如果我们把类A声明成为了类B的友元类,则在类A中可以无限制的访问B中的所有成员变量
注:友元关系是单向的,以friend开头的声明为准来建立单向友元关系
友元关系不存在传递性,即A是B的友元,B是C的友元,但如果没有显示声明A是C的友元的话,A和C就没有任何友元关系
小例如下:
1 #include <stdio.h>
2
3 class Point
4 {
5 double x;
6 double y;
7 public:
8 Point(double x, double y)
9 {
10 this->x = x;
11 this->y = y;
12 }
13
14 friend double getX(const Point& p);
15 friend double getY(const Point& p);
16 };
17
18 double getX(const Point& p)
19 {
20 return p.x;
21 }
22
23 double getY(const Point& p)
24 {
25 return p.y;
26 }
27
28 int main(int argc, char** argv)
29 {
30 Point p1(1, 2);
31
32 printf("p1.x = %f\n", getX(p1));
33 printf("p1.y = %f\n", getY(p1));
34
35 return 0;
36 }