友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。友元不是成员函数,但是它可以访问类中的私有成员。
友元的作用在于提高程序的运行效率,但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。不过,类的访问权限确实在某些应用场合显得有些呆板,从而容忍了友元这一特别语法现象。
#include <iostream>#include <math.h>using namespace std;class Data //Data类声明{public: //外部接口Data(int xx=0) { x=xx; }int GetX() { return x; }friend int Add(Data &a, Data &b);private: //私有数据成员int x;};int Add(Data &a, Data &b){return a.x + b.x;}int main(){Data a(1);Data b(2);int sum = Add(a, b);cout<<"The sum is "<<sum<<endl;return 0;}
友元类:
友元除了前面讲过的函数以外,友元还可以是类,即一个类可以作另一个类的友元。当一个类作为另一个类的友元时,这就意味着这个类的所有成员函数都是另一个类的友元函数,且可以访问其私有成员和保护成员。
注意:友元关系不能传递,如果类B是类A的友元,类C又是类B的友元,类C和类A如果没有声明则没有友元关系,另外,友元关系是单向的,如果类B是类A的友元,类B的成员函数可以访问类A对象的私有成员和保护成员,但是类A的成员函数不能访问类B对象的私有成员和保护成员。
