c++ - 如何将类的实例更改为子类的实例

标签 c++ polymorphism subclass

基本上我想做的是将类“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/

相关文章:

如果参数之一是字符串,则 C++ 返回类型等于字符串

C++ 编译器错误 : No matching function for call

c# - 需要澄清类关系的一些概念。编程新手

java - 避免 instanceof

c++ - 检查 string_view 不会超过它的字符串对象

c++ - 创建异常层次结构的正确方法是什么?

javascript - 多态和非多态类型的联合

c++ - 多态性:如何访问派生类成员函数?

design-patterns - 关于设计的问题(继承、多态)