【发布时间】:2018-12-05 18:06:48
【问题描述】:
我正在编写一个游戏,其中一个对象有能力变成另一个类别的对象(例如克拉克肯特 -> 超人)。我想知道实现这一点的最有效方法是什么。
我当前代码的逻辑:
我在 ClarkKent 类中创建了一个 turnInto() 函数。 turnInto 函数调用超人类的构造函数,将所有需要的信息传递给它。下一步是将超人对象的地址分配给当前的 ClarkKent 对象。
void ClarkKent::turnInto() {
Superman sMan(getName(), getMaxHP(), getDamage());
&(*this) = &w; // <- error here
this->ClarkKent::~ClarkKent();
}
正如您可能已经猜到的那样,编译器给出了表达式不可赋值的错误。不知道如何找到正确的解决方案。
【问题讨论】:
-
这是自找麻烦。保持简单。
-
我当前代码的逻辑: -- 你不能把一个现有的对象
foo,变成另一个对象bar。foo是foo,bar是bar。你需要退后一步,想出一个更好的设计。也许是一个单一的班级,其中一个成员决定了班级拥有什么“权力”。改变“powers”成员,然后你会让克拉克肯特变成超人。 -
不要碰这个也不要调用析构函数。
-
游戏中有多少个超人/克拉克肯特?听起来好像你应该重新设计你的设计,也许超人和克拉克肯特是同一类的两个实例?也许你不想创建一个新的实例,但它们实际上是一样的(你见过超人和克拉克肯特在同一个房间里吗?;)
-
听起来更像是您希望拥有一个具有克拉克或超人等角色的实体,并且您不想改变实体本身,而只是改变它的角色/能力。
标签: c++ type-conversion