1645
备注:
|
← 于2008-03-13 21:00:31修订的的版本6 ⇥
1859
|
删除的内容标记成这样。 | 加入的内容标记成这样。 |
行号 1: | 行号 1: |
== 友元 == | |
行号 2: | 行号 3: |
'''友元'''提供了让其它函数或类直接访问私有成员的途径。友元函数是能够直接访问类的私有成员的函数。比如要写一个函数isequal比较两个点是否相同: | '''友元'''(friend)提供了让其它函数或类绕过访问权限的控制直接访问类的所有成员(包括私有的和保护的成员)的途径。'''友元函数'''是能够直接访问类的所有成员的函数。比如要写一个函数isequal比较两个点是否相同: |
行号 8: | 行号 9: |
friend bool isequal(point a, point b); | friend bool isequal(point a, point b); //声明isequal函数是point类的友元函数 |
行号 11: | 行号 12: |
return a.x == b.x && a.y == b.y; | return a.x == b.x && a.y == b.y; //友元函数可以直接访问类的私有成员x和y |
行号 20: | 行号 21: |
实际上不用友员也可以实现同样的功能,只要将x,y变成公有或者提供共有的函数访问他们就可以了: | 实际上不用友员也可以实现同样的功能,只要将x,y变成公有或者提供公有的函数访问他们就可以了: |
行号 41: | 行号 42: |
友元类:一个类是另一个类的友员,则一个类的所有成员函数都可以访问另一个类的所有私有成员 | '''友元类''':类A是类B的友员,则类A的所有成员函数都可以访问类B的所有成员(包括私有的和保护的)。 |
友元
友元(friend)提供了让其它函数或类绕过访问权限的控制直接访问类的所有成员(包括私有的和保护的成员)的途径。友元函数是能够直接访问类的所有成员的函数。比如要写一个函数isequal比较两个点是否相同:
实际上不用友员也可以实现同样的功能,只要将x,y变成公有或者提供公有的函数访问他们就可以了:
友元类:类A是类B的友员,则类A的所有成员函数都可以访问类B的所有成员(包括私有的和保护的)。
1 class point {
2 int x, y;
3 friend class rectangle; // Rectangle是Point的友元类,Rectangle类的成员函数可以访问Point类的私有成员
4 };
5 class rectangle {
6 point p1, p2;
7 public:
8 void display() {
9 cout << p1.x << p1.y << p2.x << p2.y;
10 }
11 bool in(point p) {
12 return p.x >= p1.x && p.x < p2.x && p.y >= p1.y && p.y < p2.y;
13 }
14 };
15
16 int main() {
17 rectangle rect;
18 // initialize
19 rect.display();
20 }
注意:友元关系是单向的,并不可传递。