友元是一种定义在类外部普通函数或类,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以关键字friend。友元不是成员函数,但是它可以访问类中的私有成员

    友元的作用在于提高程序的运行效率,但是,它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员。不过,类的访问权限确实在某些应用场合显得有些呆板,从而容忍了友元这一特别语法现象。

    1. #include <iostream>
    2. #include <math.h>
    3. using namespace std;
    4. class Data //Data类声明
    5. {
    6. public: //外部接口
    7. Data(int xx=0) { x=xx; }
    8. int GetX() { return x; }
    9. friend int Add(Data &a, Data &b);
    10. private: //私有数据成员
    11. int x;
    12. };
    13. int Add(Data &a, Data &b)
    14. {
    15. return a.x + b.x;
    16. }
    17. int main()
    18. {
    19. Data a(1);
    20. Data b(2);
    21. int sum = Add(a, b);
    22. cout<<"The sum is "<<sum<<endl;
    23. return 0;
    24. }

    友元类:
    友元除了前面讲过的函数以外,友元还可以是类,即一个类可以作另一个类的友元。当一个类作为另一个类的友元时,这就意味着这个类的所有成员函数都是另一个类的友元函数,且可以访问其私有成员和保护成员。

    注意:友元关系不能传递,如果类B是类A的友元,类C又是类B的友元,类C和类A如果没有声明则没有友元关系,另外,友元关系是单向的,如果类B是类A的友元,类B的成员函数可以访问类A对象的私有成员和保护成员,但是类A的成员函数不能访问类B对象的私有成员和保护成员。