我想做一些"决斗"有两个"单位"。 我写课"决斗"由两个"单位"构成。 但某种"单位"是特殊的(继承自单位)像英雄,老板等。他们想在战斗中使用特殊的打击。 但实际上是班级"决斗"不知道谁是英雄,或者谁是纯粹的单位。
代码如下所示:
#include <iostream>
class unit{
public:
unit(){};
virtual void make_hit(){
std::cout<<"pure hit\n";
}
};
class hero:public unit {
public:
hero():unit(){};
void make_hit(){
std::cout<<"SUPER hit\n";
}
};
class duel {
unit *a, *b;
public:
duel(unit _a, unit _b):a(&_a),b(&_b){};
void start (){
a->make_hit();
b->make_hit();
}
};
int main(){
duel(unit(),hero()).start();
return 0;
}
我有两个主要问题。
首先 - 我使用引用构造函数中的临时对象。当duel :: duel()完成时,该对象非法。
第二 - 我的英雄变成了纯粹的单位,并没有使用&#34; SUPER hit&#34;
是否可以以优雅的方式修复它(不改变main()
中的呼叫?)
答案 0 :(得分:1)
在
duel(unit _a, unit _b):a(&_a),b(&_b){};
当您按值传递时,您正在切片对象。要解决此问题,您可以在构造函数
中使用指针duel(unit* _a, unit* _b):a(_a),b(_b){};
然后,您需要更改main()
以创建对象并将其传递给duel
int main(){
unit npc;
hero bob;
duel d(&npc,&bob);
d.start();
return 0;
}