私は現在、リロードのために武器クラスに関数を実装する方法について途方に暮れています。
私のプログラムが (学習目的で) 行うことになっているのは、Sword と Crossbow という 2 つのクラスから派生した抽象 Weapon クラスを持つことです。Sword クラスは想定どおりに動作するため、いじる必要があります。ただし、Crossbow クラスはロードされているかどうかを検出する必要があり、ロードされていない場合はロードして発砲します。
例として、私の先生がクラスに提供したデモ出力を次に示します: (これは、本来あるべき姿です)
クロスボウは 15 ダメージ ポイントを与えます。
剣は10ポイントのダメージを与えます。
クロスボウが装填されていません!
クロスボウは 15 ダメージ ポイントを与えます。
楽観的に言えば、似たようなものにしたいです。
直接の回答はご遠慮ください。これは宿題で、私は本当にこれを学びたいです。私は正しい方向のポイントを探しています。
武器.h
#include <iostream>
using namespace std;
class Weapon
{
public:
Weapon(int damage = 0);
virtual void Attack() const = 0;
protected:
int m_Damage;
};
Weapon::Weapon(int damage) : m_Damage(damage)
{}
class Sword : public Weapon
{
public:
Sword(int damage = 10);
virtual void Attack() const;
};
Sword::Sword(int damage): Weapon(damage)
{}
void Sword::Attack() const
{
cout << "The sword hits for " << m_Damage << " points of damage" << endl;
}
class Crossbow : public Weapon
{
public:
Crossbow(int damage = 20);
virtual void Attack() const;
void Reload() const;
};
Crossbow::Crossbow(int damage) : Weapon(damage)
{}
void Crossbow::Attack() const
{
cout << "The crossbow hits for " << m_Damage << " points of damage" << endl;
}
void Crossbow::Reload() const
{
cout << "Crossbow not loaded! Please reload" << endl;
}