gpt4 book ai didi

c++ - 将派生类转换为基类

转载 作者:行者123 更新时间:2023-11-28 03:31:58 25 4
gpt4 key购买 nike

我遇到了一个棘手的小问题。我认为问题与我类型转换东西的方式有关。

所以我有一个名为 combatEntity 的基类。它具有以下功能

class combatEntity {
public:
virtual void update();
};

然后我有一个派生自 combatEntity 的类 mob,覆盖了更新函数:

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,但似乎都不起作用。或者我需要将我的基类转换为派生类,同时使用派生类正确地覆盖函数。

希望这是有道理的。任何建议将不胜感激。

最佳答案

查看您的层次结构树,确保类与您的想法相关。

这段代码

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com