C++ 封装和内部类

C++ 封装和内部类,c++,visibility,inner-classes,private-members,C++,Visibility,Inner Classes,Private Members,我现在正在做的程序有很多内部类。由于这些内部类中有许多是私有的,不能从父类外部访问,因此我考虑将事情简化一点,将所有私有内部类的成员公开,如下所示: class Game { public: . . . private: class Monster { public: Monster(string qu, string an, string desc, int time_lim);

我现在正在做的程序有很多内部类。由于这些内部类中有许多是私有的,不能从父类外部访问,因此我考虑将事情简化一点,将所有私有内部类的成员公开,如下所示:

    class Game {
    public:
    .
    .
    .

    private:

        class Monster {
        public:
            Monster(string qu, string an, string desc, int time_lim);
            ~Monster();
            int Interact (Monster a);
            void CountDown(int time_limit);
        //Is this ok, or must the following variables be private?
            string q;
            string a;
            string description;
            int time_limit;
        };
  }
我知道作为一般规则,成员变量永远不应该声明为公共变量。然而,对于像怪物这样的内部类来说,包含getter和setter似乎有些过分。上述代码是否可以接受


谢谢

不管怎样,成功者和成功者都是邪恶的。如果您希望在类中使用openaccess,那么您需要的是一个结构。无论如何,“Public”有点用词不当,因为类型本身在
游戏
类之外是不可见的。将私有内部类设置为“开放”是完全可以的。但在上面的代码中,我会质疑Monster是否应该是一个内部类。看起来像是一个可以独立存在的职业。@cHao——“能者和二传者都是邪恶的”——不,他们不是。它们使人们能够控制对数据的访问。它使人能够隐藏实现细节。@EdHeal:除非你非常谨慎地使用它们(很少有人这样做),否则它们实际上会公开实现细节。为每个成员变量添加一个getter和setter,然后类的内部突然成为API的一部分。这是虚假数据隐藏;即使将变量隐藏在访问器后面,它也必须存在(或提供转换机制)。在这一点上,如果不对API进行破坏性的更改,您就无法显著地更改功能。@当它们是常量时,它们非常有用,尤其是getter,此类API的客户端只能读取其值