首页 > 解决方案 > 转换类对象的数据类型a (C++)

问题描述

我正在编写一个游戏,其中一个对象有能力变成另一个类的对象(例如克拉克肯特-> 超人)。我想知道实现这一点的最有效方法是什么。

我当前代码的逻辑:我turnInto()在 ClarkKent 类中创建了一个函数。该turnInto函数调用超人类的构造函数,将所有需要的信息传递给它。下一步是将超人对象的地址分配给当前的 ClarkKent 对象。

void ClarkKent::turnInto() {
    Superman sMan(getName(), getMaxHP(), getDamage());
    &(*this) = &w; // <- error here
    this->ClarkKent::~ClarkKent();
}

正如您可能已经猜到的那样,编译器给出了表达式不可赋值的错误。不知道如何找到正确的解决方案。

标签: c++type-conversion

解决方案


保持简单,不要对你的对象玩你不理解的把戏。

Superman ClartkKent::turnInto() {
    return {getName(), getMaxHP(), getDamage()};
}

在被叫方:

ClartkKent some_guy{...};
auto some_other_guy = some_guy.tunInto();

或者,如果您需要一些花哨的东西:

using NotBatman = std::variant<ClartkKent, Superman>;
NotBatman some_guy = ClartkKent{...};
using std::swap;
swap(some_guy, some_guy.tunInto());

身份证


推荐阅读