C++中的朋友类

ama*_*el2 3 c++ friend-class

在这里,我不太了解这个概念,或者我是对的....所以让我们在这里采取这个"朋友"类的例子:

class MyClass{
friend class AnotherClass;
private:
       int secret;
}

class AnotherClass{
public:
      void getSecret(MyClass mc){
          return mc.secret;
      }
}
Run Code Online (Sandbox Code Playgroud)

所以是的...在上面的代码中,如果你这样做它实际上会有效...但总的来说,为什么你不能一直使用getter和setter而不是朋友类?因为"乏味"而导致朋友级使用的原因是什么?

eml*_*lai 10

friend当你不想向所有人公开getters/setters/internals,而只是为了一个类.所以它是封装的工具.

例如,如果你提供了一个公共getSecretMyClass,每个人都可以访问该私有变量,即使他们不应该知道这一点.这破坏了封装.friend有没有解决这个问题,所以只有那些需要知道的类才能secret访问它.

正如@nicomp所说,"这就像给你的物理朋友一把钥匙给你的房子,但你不知道他们将用它做什么".因此,friend课程可以无限制地访问其所有类的所有内部成员.这很不幸,但这里的关键(没有双关语)是为了让课程尽可能小,这样就不会成为一个问题,这也是根据单一责任原则.