友元函数和友元类

来源:互联网 发布:手机淘宝咸鱼二手网 编辑:程序博客网 时间:2024/05/17 04:56
一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。现在,我们来介绍一种例外情况——友元(friend)。借助友元(friend),可以使得其他类中的成员函数以及全局范围内的函数访问当前类的 private 成员。

友元函数:
在当前类以外定义的、不属于当前类的函数也可以在类中声明,但要在前面加 friend 关键字,这样就构成了友元函数。友元函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数。

(1)友元函数可以访问当前类中的所有成员,包括 public、protected、private 属性的。
(2)friend 函数不仅可以是全局函数(非成员函数),还可以是另外一个类的成员函数。

友元类:
  友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。
例如:
  1. class A  
  2. {  
  3. public:  
  4.     friend class C;                         //这是友元类的声明  
  5. private:  
  6.     int data;  
  7. };  
  8.   
  9. class C             //友元类定义,为了访问类A中的成员  
  10. {  
  11. public:  
  12.     void set_show(int x, A &a) { a.data = x; cout<<a.data<<endl;}  
  13. };  
注意:
(1) 友元关系不能被继承。
(2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。
(3) 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明。

原创粉丝点击