|
于2007-12-04 21:30:51修订的的版本2
大小: 1663
备注:
|
于2007-12-04 21:33:14修订的的版本3
大小: 1787
备注:
|
| 删除的内容标记成这样。 | 加入的内容标记成这样。 |
| 行号 1: | 行号 1: |
| '''友元'''(friend)提供了让其它函数或类直接访问私有成员的途径。'''友元函数'''是能够直接访问类的私有成员的函数。比如要写一个函数isequal比较两个点是否相同: | '''友元'''(friend)提供了让其它函数或类绕过访问权限的控制直接访问类的所有成员(包括私有的和保护的成员)的途径。'''友元函数'''是能够直接访问类的所有成员的函数。比如要写一个函数isequal比较两个点是否相同: |
| 行号 7: | 行号 7: |
| friend bool isequal(point a, point b); | friend bool isequal(point a, point b); //声明isequal函数是point类的友元函数 |
| 行号 40: | 行号 40: |
| '''友元类''':一个类是另一个类的友员,则一个类的所有成员函数都可以访问另一个类的所有私有成员 | '''友元类''':类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 }
注意:友元关系是单向的,并不可传递。