C ++:处理组合类

时间:2013-10-13 20:53:03

标签: c++ class inheritance containers composition

我实际上是在学习使用继承的游戏编程,但是当我的派生类变得越来越复杂时,它真的很烦人。

我听说过组合类以及如何简单地将“插件”功能类添加到处理类中,但是在使用容器时我遇到了问题。

如果我想使用继承添加许多不同的对象,我将使用相同的基类(Entity)创建许多派生类(Object1,Object2,Object3),并使用向量跟踪它们。

前:

class Game
{
public:
                Game();
                ~Game();
    void        initialize()    { mEntities.push_back(new Object1);
                                  mEntities.push_back(new Object2);
                                  mEntities.push_back(new Object3);

                                  for(int i(0); i < mEntities.size(); ++i)
                                      mEntities[i]->initialize();
                                }

    void        update(float dt){ for(int i(0); i < mEntities.size(); ++i)
                                      mEntities[i]->update(dt);
                                }

    void        render()        { for(int i(0); i < mEntities.size(); ++i)
                                      mEntities[i]->render();
                                }

private:
    vector<Entity*> mEntities;

};

现在使用组合类,我无法找到如何跟踪不同的对象而不返回继承。 现在,这就是我使用构图的方式:

// I create "feature" classes
class Drawable
{   /* ... */
};

class Movable
{   /* ... */
};

class Destroyable
{   /* ... */
};

// Then the object classes
class Object1
{
private:
    Drawable    drawable;
    Movable     movable;

};

class Object2
{
    /* similar stuff... */
};

现在我的对象没有公共基类,我不明白如何在不单独创建它们的情况下处理它们。

我的问题是,我应该做些什么来遍历许多不具有公共基类的不同对象?

由于

0 个答案:

没有答案