在以下情况下删除 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".