私は遭遇したトリッキーな小さな問題を抱えています。問題は私が物を投げる方法に関係していると思います。
だから私はという基本クラスを持っていcombatEntity
ます。以下の機能があります
class combatEntity {
public:
virtual void update();
};
次に、から派生したクラスmobがありcombatEntity
、更新関数をオーバーライドします。
class mob : public combatEntity {
public:
virtual void update();
}
monster
次に、update関数から派生しmob
、update関数をオーバーライドするという名前のクラスがあります。
class monster: public mob {
public:
virtual void update();
}
私はcombatEntityポインタを持っていますi
:
combatEntity* i;
で、〜がある:
//returns a mob* pointer (needs explicit cast)
monster* newMonster = getMob();
i = newMonster;
getMob()
機能:
mob* getMob() {
mob* newMob = new mob();
//set some data in newMob
return newMob;
}
を呼び出すとi->update()
、「new mob();」に設定されているmob::update()
ため、新しいmobポインタを返すため、を呼び出します。を呼び出すときは、呼び出す必要がありますが、ブレークポイントを使用すると、呼び出しではなく呼び出しであることがわかります。newMonster
getMob()
i->update()
monster::update()
mob::update()
monster::update()
したがって、新しいmonster
オブジェクトを作成する必要がありますが、それでも、から返されたオブジェクトで基本クラスデータが満たされていますgetMob()
が、関数は適切にオーバーライドされています。dynamic_cast、static_cast、reinterpret_castも試しましたが、どれも機能していないようです。または、派生クラスで関数を適切にオーバーライドしながら、基本クラスを派生クラスにキャストする必要があります。
うまくいけば、これは意味を成します。何かアドバイスをいただければ幸いです。