0

我有几节课。一个类应该对任何需要它的人可见,其余的是辅助类(嗯,其中一些是结构),它们应该只能由主体类访问。我最初将此实现为主体类中的嵌套类,但随着我添加更多帮助类,这开始使头文件变得繁琐。所以现在我已经将帮助类放在一个单独的名称空间中,名称令人生畏,但我怀疑有更好的方法。我想使用匿名命名空间,但我不能真正将帮助类从标题中取出,因为它们在主体类中显示为成员变量。

这是我的头文件中现在的构造的简化版本,减去包含守卫:

namespace __TopSecretVisibleNamespace {
    class Invisible{
    };
}

using namespace __TopSecretVisibleNamespace;
class Visible {
    public:
        Visible();
    private:
        Invisible sneaky;
};

有什么想法吗?

4

1 回答 1

0

您不能从字面上“隐藏”它们,但是您可以使用protected修饰符使任何其他类都无法访问它们。如果出于任何原因不想在所有类成员上使用 protected,则只能在构造函数上使用它。在这种情况下,非朋友类不能访问该类的任何成员,包括公共成员。

 class Invisible {
    friend class Visible;
    protected:
    Invisible() {
    }
    public:
    // though public, they cannot be called by classes other than Visible, because they can't instantiate the class.
    int Calc(int n)  
    {
        return n*n;
    }
    int i;  
};

class Visible {
    public:
    Visible(int i)
    {
        Invisible o;
        x=o.Calc(i);
    }
    int x;
};
于 2013-05-04T17:06:19.747 回答