C++ 友元

友元是C++中的一个特殊功能,它允许其他类或者函数访问其本来的非公有成员,包括private和protected成员。

一、友元类

将其他类声明为友元类,该类可以访问本类的非公有成员:

class MyClass {
  friend class FriendClass;

private:
  int x;
};

class FriendClass {
  public:
    void func(MyClass& c) {
      c.x = 1; // 允许访问private成员
    }
};

二、友元函数

非成员函数也可以被声明为友元:

class MyClass {
  friend void func(MyClass&);

private:
  int x;
};

void func(MyClass& c) {
  c.x = 1; // 允许访问private
}

三、成员函数作为友元

成员函数可以被设置为其他类的友元:

class A {
  friend void B::func(A&);
}; 

class B {
  public:
    void func(A& a) {
      a.x = 1; 
    }
};

四、限制过多使用

但是需要注意过多使用友元可能会破坏封装性。

五、优点与缺点

友元提高了软件可靠性,但是降低了对象的独立性。

友元是C++访问权限控制中的一项高级功能,提高了类之间的配合程度,但是也降低了灵活性,应该谨慎使用。