我知道基于多态性,您不能调用非虚函数/方法
前任:
class Entity
{
public:
Entity() { health = 10; }
void DisplayHealth() { std::cout << health << std::endl; }
protected:
int health;
};
class Player : public Entity
{
};
class Enemy : public Entity
{
void SetHealth(int n) { health = n; }
};
int main()
{
Entity *instance = new Enemy();
instance->SetHealth(1); // Error
return 0;
}
所以我想出的解决办法是做这样的事情:
int main()
{
Entity *instance = new Enemy();
Enemy e = *(Enemy*)instance;
e.SetHealth(1);
instance = &e;
}
这可以很好地满足我的需求,但我想知道这是否是“正确”的做法。有没有更有效的方法来使用多态调用子类方法?