현재 재로드를위한 무기 클래스에 함수를 구현하는 방법에 대한 손실이 있습니다."재로드"기능 구현
내 프로그램은 (학습을 목적으로) 수행 할 것으로 예상되는 Weapon 클래스에는 Sword와 Crossbow라는 두 클래스가 있습니다. 소드 클래스는 예상대로 작동하기 때문에 함께 놀 필요가 있습니다. 그러나 Crossbow 클래스는로드 여부를 감지해야하며,로드되지 않으면로드하고 실행합니다. 예를 들어
, 여기 선생님이 클래스에 준 데모 출력 :크로스 보우 15 손상 포인트를 입히고 (이 그것을보고 생각하는 방법이다).
소드는 10 포인트의 피해를 입 힙니다.
석궁이 없습니다!
크로스 보우는 15 점의 피해를 입 힙니다.
낙관적 인 말로하면, 나는 비슷하게 보이고 싶습니다.
제발, 직접적인 답변이 없습니다. 이것은 숙제이며, 저는 이것을 정말로 배우고 싶습니다. 나는 올바른 방향으로 점들을 찾고있다.
Weapon.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;
}
에헴 ... 그건 너무 많은 도움이됩니다.'Crossbow'는 내부 상태를 가지고 있으며 OO의 주요 기능 중 하나가 캡슐화되어 있기 때문에이 상태를 저장하는 위치는 분명해야합니다. –
Reloadable 인터페이스를 만들 수도 있고 그것을 필요로하는 클래스에서만 구현하십시오. –
@ HanletEscaño : C++에는 인터페이스가 없습니다. 서브 클래스 또는 mutliple 상속 (brrr)이 작업을 수행 할 수 있습니다. –