我遇到了一个棘手的小问题。我相信这个问题与我铸造事物的方式有关。
所以我有一个名为combatEntity
. 它具有以下功能
class combatEntity {
public:
virtual void update();
};
然后我有一个类 mob,它派生自combatEntity
,覆盖更新函数:
class mob : public combatEntity {
public:
virtual void update();
}
然后我有一个名为 的类monster
,它派生自mob
并且还覆盖了更新函数。
class monster: public mob {
public:
virtual void update();
}
我有一个名为战斗实体的指针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()
,它调用mob::update()
,因为newMonster
设置为“new mob();”,因为getMob()
返回一个新的 mob 指针。当我调用时i->update()
,我需要它调用monster::update()
,但是使用断点,我看到它正在调用mob::update()
而不是调用monster::update()
。
所以我需要创建一个新monster
对象,但仍然有它的基类数据填充从返回的对象getMob()
,但函数被正确覆盖。我也尝试过 dynamic_cast、static_cast 和 reinterpret_cast,但似乎都没有。或者我需要将我的基类转换为派生类,同时用派生类正确覆盖函数。
希望这是有道理的。任何意见,将不胜感激。