0

ポリモーフィズムに基づいて、非仮想関数/メソッドを呼び出すことができないことを知っています

元:

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; 
}

これは私のニーズには問題なく機能しますが、これが「正しい」方法であるかどうか疑問に思っています。ポリモーフィズムを使用して子クラスのメソッドを呼び出すより効率的な方法はありますか?

4

1 に答える 1