在以下情况下删除 friend class 依赖
Remove friend class dependency in the following case
class foo
{
bar b;
someFunction()
{
b.alphaObj->someFunctionOfAlpha();
}
};
class bar
{
friend class foo;
// many more friends
private:
alpha *alphaObj;
};
如何在不使用 getter 和 setter 公开私有成员的情况下删除好友依赖项。
我知道 friend classes 可以帮助增强封装,但是我的 class 中定义了很多 friend classes 将私有成员公开给所有人。因此,我正在考虑更好的方法,我们将不胜感激。
独立于你的friend
问题,被要求写这个
b.alphaObj->someFunctionOfAlpha();
不是最好的设计。你应该打电话给 (*):
b.someFunctionOfAlpha();
至此,如何删除好友也一目了然了:
class bar
{
public:
void someFunctionOfAlpha() { alphaObj->someFunctionOfAlpha(); }
private:
alpha *alphaObj;
};
(*) 这个指南有名字,我暂时找不到。一般来说,调用一个方法应该是这样的:"Do that!"。调用方法不应该像 "Show me your internals so I can do what I want".
class foo
{
bar b;
someFunction()
{
b.alphaObj->someFunctionOfAlpha();
}
};
class bar
{
friend class foo;
// many more friends
private:
alpha *alphaObj;
};
如何在不使用 getter 和 setter 公开私有成员的情况下删除好友依赖项。 我知道 friend classes 可以帮助增强封装,但是我的 class 中定义了很多 friend classes 将私有成员公开给所有人。因此,我正在考虑更好的方法,我们将不胜感激。
独立于你的friend
问题,被要求写这个
b.alphaObj->someFunctionOfAlpha();
不是最好的设计。你应该打电话给 (*):
b.someFunctionOfAlpha();
至此,如何删除好友也一目了然了:
class bar
{
public:
void someFunctionOfAlpha() { alphaObj->someFunctionOfAlpha(); }
private:
alpha *alphaObj;
};
(*) 这个指南有名字,我暂时找不到。一般来说,调用一个方法应该是这样的:"Do that!"。调用方法不应该像 "Show me your internals so I can do what I want".