|
于2007-12-04 21:33:14修订的的版本3
大小: 1787
备注:
|
于2007-12-04 21:34:07修订的的版本4
大小: 1843
备注:
|
| 删除的内容标记成这样。 | 加入的内容标记成这样。 |
| 行号 10: | 行号 10: |
| return a.x == b.x && a.y == b.y; | return a.x == b.x && a.y == b.y; //友元函数可以直接访问类的私有成员x和y |
| 行号 19: | 行号 19: |
| 实际上不用友员也可以实现同样的功能,只要将x,y变成公有或者提供共有的函数访问他们就可以了: | 实际上不用友员也可以实现同样的功能,只要将x,y变成公有或者提供公有的函数访问他们就可以了: |
友元(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 }
注意:友元关系是单向的,并不可传递。