【发布时间】:2019-02-13 21:31:58
【问题描述】:
friend 函数的使用对我来说似乎有点小技巧。 friend函数是否违反了封装的概念?
friend 函数的替代方法是什么?与仅使用 friend 相比,使用简单的帮助类/函数以及 setter 和 getter 成员函数是否有助于增加封装?
【问题讨论】:
-
嗯,一个只有一个 getter 和一个 setter 的简单类......与公开这些成员没有什么不同。你只是在对自己撒谎。朋友函数实际上更有助于封装,因为您直接定位谁可以访问您的成员。
-
@GuillaumeRacicot:但是与其他人共享这样的
secret keys会在以后的代码(尤其是大项目)中造成混乱 - 成员函数的常量等 -
When should you use 'friend' in C++?(通过快速搜索找到)可能会有所帮助。
-
Scott Meyers 写了许多关于成员函数、非成员朋友和非成员非朋友的文章 - 以及它们如何影响封装。你可以用谷歌找到一个公平的数字。随着时间的推移,他的一些思想细节发生了变化。请记住,封装本身并不是一个真正理想的属性 - 它是控制和本地化更改效果的一种方式,因此有助于提高灵活性(控制更改的能力)和稳健性(在进行更改时不会引入意外缺陷)等属性)。
-
如果您将封装程度衡量为编译器允许访问另一段代码的代码量,则此问题不是基于意见的。
标签: c++ oop encapsulation friend access-modifiers