加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 类接口查询

发布时间:2020-12-16 07:05:27 所属栏目:百科 来源:网络整理
导读:我一直想知道我的游戏引擎和游戏已经使用了很长时间的设计.假设我们有一个Object类 class Object{ public: const std::string getName() { return m_name; } private: std::string m_name;} 然后,我有一个名为ObjectManager的类,它包含一个Object实例.现在,
我一直想知道我的游戏引擎和游戏已经使用了很长时间的设计.假设我们有一个Object类

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

    private:
        std::string m_name;
}

然后,我有一个名为ObjectManager的类,它包含一个Object实例.现在,我一直在想我是否应该在ObjectManager中保持该实例私有并重复代码,以便它可以调用getName(),或者使Object公开,这会破坏封装的概念.你们认为哪种设计更好?

谢谢你的帮助!

解决方法

如果您的类包含其他人可以使用的对象,请将其公开.封装意味着隐藏做某事所需的变量.某些数据成员不属于此.

例:

人汤姆;

tom.getEyes().getColor();
    tom.getMouth().eat(tomato);
    tom.legs().walk();

人可以隐藏一切,但这会很麻烦:

tom.getEyesColor(); // accessor for every eye feature
    tom.eat(tomato);   
    tom.walkAndEat();   // every possible combination of actions

进一步举例:

grid.row(3).col(5).setText("hello");

这里的列类可以暴露许多方法,而不必触及网格类.这是面向对象编程的美妙之处.

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

class ObjectManager : public Object
    {
    };

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读