友元函数和友元类

  • 友元函数: 定义在类外的普通函数,不属于任何类,可以访问其他类的私有成员。但是需要在类的定义中声明友元函数
  • 友元类: 友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。在另一个类里面也要相应的进行声明
  • class A
    {
    public:
        friend void set_show(int x, A &a);      //该函数是友元函数的声明
    private:
    };
    void set_show(int x, A &a){}               //友元函数定义,为了访问类A中的成员
    
    ------------------------------------友元类
    class A
    {
    public:
       friend class C;                         //这是友元类的声明
    private:
       int data;
    };
    class C                                   //友元类定义,为了访问类A中的成员
    {
    public:
       void set_show(int x, A &a) { a.data = x; cout<<a.data<<endl;}
    };
    int main(void)
    {
       class A a;
       class C c;
       c.set_show(1, a);
       return 0;
    }

注意:

1. 友元关系不能被继承。

2. 友元关系是单向的,不具有交换性。

3. 友元关系不具有传递性。 要看声明。