在这里,我不太了解这个概念,或者我是对的....所以让我们在这里采取这个"朋友"类的例子:
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,而只是为了一个类.所以它是封装的工具.
例如,如果你提供了一个公共getSecret的MyClass,每个人都可以访问该私有变量,即使他们不应该知道这一点.这破坏了封装.friend有没有解决这个问题,所以只有那些需要知道的类才能secret访问它.
正如@nicomp所说,"这就像给你的物理朋友一把钥匙给你的房子,但你不知道他们将用它做什么".因此,friend课程可以无限制地访问其所有类的所有内部成员.这很不幸,但这里的关键(没有双关语)是为了让课程尽可能小,这样就不会成为一个问题,这也是根据单一责任原则.
| 归档时间: |
|
| 查看次数: |
1926 次 |
| 最近记录: |