我遇到一个棘手的小问题。我认为问题与我的投射方式有关。
因此,我有一个名为combatEntity
的基类。具有以下功能
class combatEntity {
public:
virtual void update();
};
然后,我有一个来自
combatEntity
的类暴民,它覆盖了更新功能:class mob : public combatEntity {
public:
virtual void update();
}
然后,我有一个名为
monster
的类,该类是从mob
派生的,并且还覆盖了update函数。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,但似乎都无法使用。或者,我需要将基类转换为派生类,同时用派生类正确覆盖函数。希望这有道理。任何意见,将不胜感激。
最佳答案
查看您的层次结构树,确保类与您的想法相关。
这段代码
#include <iostream>
struct combatEntity
{
virtual void Update() { std::cout << "Combat Entity\n"; };
};
struct mob : combatEntity
{
virtual void Update() { std::cout << "Mob\n"; };
};
struct monster : mob
{
virtual void Update() { std::cout << "Monster\n"; };
};
int main(int argc, char **argv)
{
combatEntity *ce = new monster;
ce->Update();
delete ce;
return 0;
}
创建以下输出:
Monster
资料来源:http://ideone.com/k6LAB
关于c++ - 将派生类转换为基类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12276689/