【发布时间】:2020-04-03 11:04:54
【问题描述】:
class foo
{
bar b;
someFunction()
{
b.alphaObj->someFunctionOfAlpha();
}
};
class bar
{
friend class foo;
// many more friends
private:
alpha *alphaObj;
};
如何在不使用 getter 和 setter 暴露私有成员的情况下删除朋友依赖项。 我知道朋友类可以帮助增强封装,但是在我的类中定义了很多朋友类,将私有成员暴露给所有人。因此,我正在考虑一种更好的方法,并感谢任何帮助。
【问题讨论】:
-
需要很多朋友说明一组封装不好的类——为什么这么多类需要访问类栏?
-
我们在这里处理遗留代码,就是这样。我们现在正在考虑用更好的设计进行重构
-
这里的例子感觉有点太笼统,没用。通常
someFunctionOfAlpha想被转移到其他可以公开的班级。它可能是一个包装器,说bar创建或成为bar本身的成员。另一种选择是传递一个回调函数并调用它,而不是直接调用它。