类接口查询

Pet*_*ter 5 c++

我一直想知道我在游戏引擎和游戏中使用了相当长一段时间的设计。假设我们有一个 Object 类

class Object
{
    public: 
        const std::string& getName() { return m_name; }

    private:
        std::string m_name;
}
Run Code Online (Sandbox Code Playgroud)

然后,我有一个名为 ObjectManager 的类,它保存一个 Object 实例。现在,我一直在想是否应该在 ObjectManager 中将该实例保留为私有并重复代码,以便它可以调用 getName(),或者将 Object 设为公共,这违背了封装的概念。大家觉得哪种设计更好呢?

谢谢你的帮助!

edw*_*inc 2

如果您的类包含可供其他人使用的对象,请公开它。封装的目的是隐藏做某事所需的变量。某些数据成员不属于这种情况。

例子:

人汤姆;

    tom.getEyes().getColor();
    tom.getMouth().eat(tomato);
    tom.legs().walk();
Run Code Online (Sandbox Code Playgroud)

Person 可以隐藏所有内容,但这会很麻烦:

    tom.getEyesColor(); // accessor for every eye feature
    tom.eat(tomato);   
    tom.walkAndEat();   // every possible combination of actions
Run Code Online (Sandbox Code Playgroud)

进一步的例子:

    grid.row(3).col(5).setText("hello"); 
Run Code Online (Sandbox Code Playgroud)

这里,列类可以公开许多方法,而无需触及网格类。这就是面向对象编程的美妙之处。

如果您将您的类命名为 ObjectManager,我感觉它正在为其他人管理对象实例,因此您应该公开它。使用继承的另一个想法也是有效的:

    class ObjectManager : public Object
    {
    };
Run Code Online (Sandbox Code Playgroud)