设为首页 加入收藏

TOP

13.1.7 友元
2013-10-07 01:13:46 来源: 作者: 【 】 浏览:71
Tags:13.1.7友元

13.1.7  友元

友元从字面上来理解,就是"朋友成员",友元提供了直接访问类的私有成员的方法。既可以将函数定义为友元,也可以将类本身定义为友元。友元函数就是将程序中的任意一个函数,甚至是另一个类定义中的成员函数,声明为友元。该函数不是该类的成员函数,而是独立于类的外界的函数,但是该函数可以访问这个类对象中的私有成员。定义格式如下:

  1. friend <返回类型> <函数名> (<参数列表>); 

除了友元函数外,一个类也可以被声明为另一个类的友元,该类被称为友元类。这就意味着作为友元的类中的所有成员函数都可以访问另一个类中的私有成员。声明格式如下:

  1. friend class <类名>; 

假设有类A和类B,若在类B的定义中将类A声明为友元,那么类A的所有成员函数都可以访问类B中的任意成员。

【示例13-12】 演示友元的使用方法。

  1. class B  
  2. {  
  3. private:  
  4.     int bx,by;  
  5. public :  
  6.     B(int i,int j);  
  7.     friend class A;          //声明友元类  
  8. };  
  9. B::B(int i,int j)  
  10. {  
  11.     bx=i;  
  12.     by=j;  
  13. }  
  14. class A  
  15. {  
  16. private:  
  17.     int ax,ay;  
  18. public:  
  19.     A(int i,int j);  
  20.     friend int sum(A );     //声明友元函数,该函数不属于该类  
  21.     int sumB(B b);          //该函数将访问类B的私有成员  
  22. };  
  23. A::A(int i,int j)  
  24. {  
  25.     ax=i;  
  26.     ay=j;  
  27. }  
  28. int sum(A a)                //定义友元函数  
  29. {  
  30.     return (a.ax+a.ay);     //访问类对象的a的私有成员ax和ay  
  31. }  
  32. int A::sumB(B b)          
  33. {  
  34.     return (b.bx+b.by);     //访问类对象的b的私有成员bx和by  
  35. }  
  36. int main()  
  37. {  
  38.     B b(3,8);  
  39.     A a(5,10);  
  40.     cout<<sum(a)<<endl;  
  41.     cout<<a.sumB(b)<<endl;  
  42.     return 0;  

分析:sum被声明为类A的友元函数,就可以访问类A的私有成员,但它并不是类A的成员函数。因此sum的具体实现在类外,且不带"A::"这样的限定。类A又被声明为类B的友元,但A并不属于类B,只是表明类A可以访问类B的私有成员。因此,该实例的运行结果如下所示。

  1. 15  
  2. 11 
注意:友元只是用来说明一种关系,而不是声明一个对象。既被声明为友元的对象并不属于所在的类体,不能从所在类内访问该友元。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇13.1.4 构造函数 下一篇13.1.11 类文件的组织

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: