C ++函数覆盖不起作用?

时间:2014-10-26 13:18:23

标签: c++ override

我正在为一个作业开发游戏,我遇到了一个用C ++中的函数覆盖问题。

我有以下结构:

class GameEntity
{
public:
    bool GameEntity::TakeHit(int dmg);
};

class Enemy : public GameEntity
{
    bool Enemy::TakeHit(int dmg);
};

当我从另一个类创建一个Enemy实例时,将它存储在GameEntity向量中,然后在其上调用TakeHit(),它调用它的GameEntity版本。我已经习惯了Java,这会调用另一个版本,我在做一些明显错误的事情吗?

其他问题并没有真正涵盖这一点,所以我创造了自己的。

这可能是我猜的非常简单,所以为这个麻烦道歉。

1 个答案:

答案 0 :(得分:2)

您需要通过virtual关键字声明方法可以覆盖。 编辑:正如在注释中指出的那样,在类定义中添加classname限定符不是有效的C ++(但某些扩展允许,例如在MSVC ++中)。

class GameEntity
{
public:
    virtual bool TakeHit(int dmg); // Can be overriden in subclasses
};

class Enemy : public GameEntity
{
    bool TakeHit(int dmg); // No need to write virtual again
};