从子类

时间:2015-09-09 19:29:13

标签: c++ class polymorphism

我想做一些"决斗"有两个"单位"。 我写课"决斗"由两个"单位"构成。 但某种"单位"是特殊的(继承自单位)像英雄,老板等。他们想在战斗中使用特殊的打击。 但实际上是班级"决斗"不知道谁是英雄,或者谁是纯粹的单位。

代码如下所示:

#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()中的呼叫?)

1 个答案:

答案 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;
}