c++ - 转换类对象的数据类型a (C++)
问题描述
我正在编写一个游戏,其中一个对象有能力变成另一个类的对象(例如克拉克肯特-> 超人)。我想知道实现这一点的最有效方法是什么。
我当前代码的逻辑:我turnInto()
在 ClarkKent 类中创建了一个函数。该turnInto
函数调用超人类的构造函数,将所有需要的信息传递给它。下一步是将超人对象的地址分配给当前的 ClarkKent 对象。
void ClarkKent::turnInto() {
Superman sMan(getName(), getMaxHP(), getDamage());
&(*this) = &w; // <- error here
this->ClarkKent::~ClarkKent();
}
正如您可能已经猜到的那样,编译器给出了表达式不可赋值的错误。不知道如何找到正确的解决方案。
解决方案
保持简单,不要对你的对象玩你不理解的把戏。
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());
身份证
推荐阅读
- python - 从列表python中的dict获取索引
- plot - 使用 Julia 绘图时 GKS QtTerm 窗口没有响应
- java - Android:在 FragmentTransaction ,beginTransaction 方法中出现错误
- c++ - 智能指针上的模板扣除/替换失败
- prestashop - 产出价格函数的公式
- grafana - Grafana Loki 的 Fluentd 动态标签
- html - 如何将图像放入表格的中间表格单元格中
- amazon-ec2 - 如何在由来自不同云提供商的 VM 组成的 VPN 上托管 kubernetes 集群
- java - 从 Rest API Java 下载 ODS/XLS
- angular - Angular 9文件上传未将文件添加到表单组