我正在为一个作业开发游戏,我遇到了一个用C ++中的函数覆盖问题。
我有以下结构:
class GameEntity
{
public:
bool GameEntity::TakeHit(int dmg);
};
class Enemy : public GameEntity
{
bool Enemy::TakeHit(int dmg);
};
当我从另一个类创建一个Enemy实例时,将它存储在GameEntity向量中,然后在其上调用TakeHit(),它调用它的GameEntity版本。我已经习惯了Java,这会调用另一个版本,我在做一些明显错误的事情吗?
其他问题并没有真正涵盖这一点,所以我创造了自己的。
这可能是我猜的非常简单,所以为这个麻烦道歉。
答案 0 :(得分:2)
使TakeHit
成为虚拟成员函数。
// You don't need the scope specifier GameEntity::
// Make it pure virtual to force sub-classes to implement them.
virtual bool TakeHit(int dmg) = 0;
存储指向对象的指针,最好是smart pointers,而不是对象。如果您只存储对象,则会遇到object slicing problem。
答案 1 :(得分:1)
GameEntity
的功能需要virtual
关键字。