13.1.7 友元
友元从字面上来理解,就是"朋友成员",友元提供了直接访问类的私有成员的方法。既可以将函数定义为友元,也可以将类本身定义为友元。友元函数就是将程序中的任意一个函数,甚至是另一个类定义中的成员函数,声明为友元。该函数不是该类的成员函数,而是独立于类的外界的函数,但是该函数可以访问这个类对象中的私有成员。定义格式如下:
- friend <返回类型> <函数名> (<参数列表>);
除了友元函数外,一个类也可以被声明为另一个类的友元,该类被称为友元类。这就意味着作为友元的类中的所有成员函数都可以访问另一个类中的私有成员。声明格式如下:
- friend class <类名>;
假设有类A和类B,若在类B的定义中将类A声明为友元,那么类A的所有成员函数都可以访问类B中的任意成员。
【示例13-12】 演示友元的使用方法。
- class B
- {
- private:
- int bx,by;
- public :
- B(int i,int j);
- friend class A;
- };
- B::B(int i,int j)
- {
- bx=i;
- by=j;
- }
- class A
- {
- private:
- int ax,ay;
- public:
- A(int i,int j);
- friend int sum(A );
- int sumB(B b);
- };
- A::A(int i,int j)
- {
- ax=i;
- ay=j;
- }
- int sum(A a)
- {
- return (a.ax+a.ay);
- }
- int A::sumB(B b)
- {
- return (b.bx+b.by);
- }
- int main()
- {
- B b(3,8);
- A a(5,10);
- cout<<sum(a)<<endl;
- cout<<a.sumB(b)<<endl;
- return 0;
- }
分析:sum被声明为类A的友元函数,就可以访问类A的私有成员,但它并不是类A的成员函数。因此sum的具体实现在类外,且不带"A::"这样的限定。类A又被声明为类B的友元,但A并不属于类B,只是表明类A可以访问类B的私有成员。因此,该实例的运行结果如下所示。
- 15
- 11
注意:友元只是用来说明一种关系,而不是声明一个对象。既被声明为友元的对象并不属于所在的类体,不能从所在类内访问该友元。
【责任编辑:
云霞 TEL:(010)68476606】