4.1.2 友元类
除了前面讲过的友元函数外,友元还可以是一个类,即一个类可以作为另一个类的友元。当一个类作为另一个类的友元时,就意味着这个类的所有成员函数都是另一个类的友元函数。例如,以下程序说明类B是类A的友元类:
- class A
- { ...
- public:
- friend class B; //说明B是A的友元类
- ...
- }
例如,有以下程序:
- #include <iostream.h>
- #include <math.h>
- class A
- { int x;
- public:
- A() {x=5;}
- friend class B;
- };
- class B
- {
- public:
- void disp1(A tmp) {tmp.x++;cout << "disp1: x=" << tmp.x << endl; }
- void disp2(A tmp) {tmp.x--;cout << "disp2: x=" << tmp.x << endl; }
- };
- void main()
- { A obj1;
- B obj2;
- obj2.disp1(obj1);
- obj2.disp2(obj1);
- }
上述程序中,类B是类A的友元类,类B包括两个成员函数,这两个成员函数可以当成类A自已的友元函数一样使用。该程序的执行结果如下:
- disp1:x=6
- disp2:x=4
使用友元类时注意以下几点:
友元关系不能被继承。
友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的声明。