基本上我想做的是将类“MovingHero”的实例设置为“ShootingHero”,它是“MovingHero”的子类。
正如我现在所拥有的,MovingHero 类有一个名为 levelUp() 的函数,如下所示:
MovingHero levelUp()
{
ShootingHero theHero();
return theHero;
}
在我的主要功能中我有:
if(hero1.getScore() == 5)
hero1 = hero1.levelUp();
我没有收到任何错误,但在 if 语句执行后,hero1 仍然是 MovingHero 而不是 ShootingHero。
我认为这与运算符重载有关,但我不确定。任何帮助,将不胜感激。谢谢!
最佳答案
运算符重载?!不,这与此无关。
当您从该函数返回时,您切片您的 ShootingHero
对象† 到一个新的 MovingHero
中。为了利用动态多态性,您需要使用间接寻址。这意味着指针和/或引用。
您不能使用对象复制并保留原始的最派生类型:您假设您有一个 MovingHero
可以使用是不正确的。请阅读您的 C++ 书籍中有关多态性的章节。
† 实际上,您没有 ShootingHero
对象,因为您编写了 ShootingHero theHero();
是一个函数声明。您向我们展示的代码不会编译;你可能是说 ShootingHero theHero;
。
关于c++ - 如何将类的实例更改为子类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20386100/