在继承自Abstract基类的类中添加方法?

时间:2019-01-14 02:11:06

标签: c++ c++11

我有类似以下代码

class GameObject
{
public:
    virtual void update(...) = 0;
    virtual void render(...) = 0;
};

class Sprite : public GameObject
{
public:

    Sprite();
   ~Sprite()
    {

    }

    void setSrcRect()noexcept
    {
       //Some code
    }

    void setDstRect()noexcept
    {
       //Some code
    }

    uint32_t getWidth() const noexcept { return width_; }
    uint32_t getHeight() const noexcept { return height_; }

    virtual void update(...) override
    {
        //Some code
    }

    virtual void render(...) override
    {
       //Some code
    }
};

后来我创建了

之类的对象
GameObject* obj = new Sprite();

问题是我无法调用类似的方法

obj->getWidth();

我可以在GameObject中添加这些方法,但我想保持其纯接口。仅具有纯虚拟方法。我之所以选择这样的GameObject,是因为当我以后在游戏中拥有更多对象时,它将为我带来好处。

我可以存储它们

std::vector<GameObject*> actors;

我可以做的渲染

 for(const auto actor: actors)
 {
   actor->render();
 }

除了当前精灵外,还可以再有一个GameObject SpriteSheet,依此类推。我该怎么做才能做到这一点?保持GameObject不变,但向从其继承的类中添加方法。

我确实知道精灵的类型仍然是GameObject,方法调用只能在运行时解决。因此,我是否要求任何其他方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

使用dynamic_cast

auto sprite_game_obj = dynamic_cast<Sprite*>(obj);
if(sprite_game_obj) sprite_game_obj->getWidth()

或更短的

dynamic_cast<Sprite*>(obj)->getWidth()

Here's a sample code snippet to show it in usage.