#include <iostream>
#include <string>
using namespace std;

class Creature { // 基本クラス1
protected:
    string name;
public:
    Creature(string name) { this->name = name; } // コンストラクタ
    virtual void attack(string s) {}; // メンバ関数(仮想関数とする)
};

class HumanType : public Creature { // 派生クラス1
public:
    HumanType(string n) : Creature(n) {}
    void attack(string s) { // メンバ関数をオーバーライド
        cout << name << "は" << s << "で攻撃した！" << endl;
    }
};

class DragonType : public Creature { // 派生クラス2
public:
    DragonType(string n) : Creature(n) {}
    void attack(string s) { // メンバ関数をオーバーライド
        cout << name << "は" << s << "を吐き出した！" << endl;
    }
};

int main() {
    Creature* enemy[3];
    enemy[0] = new HumanType("ゴブリン兵A");
    enemy[1] = new HumanType("ゴブリン兵B");
    enemy[2] = new DragonType("邪竜");
    enemy[0]->attack("棍棒");
    enemy[1]->attack("短剣");
    enemy[2]->attack("灼熱の炎");
    for (int i = 0; i < 3; i++) delete enemy[i];
}