gpt4 book ai didi

c++ - 实现 "Reload"函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:31 24 4
gpt4 key购买 nike

我目前不知道如何为我的 Weapon 类实现一个函数以进行重新加载。

我的程序应该做的(出于学习目的)是有一个抽象的 Weapon 类,该类有两个从它派生的类,Sword 和 Crossbow。 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;
}

最佳答案

不要尝试在您的基类中添加字段“ammo”。剑没有“弹药”的概念。将它添加到您的 Crossbow 类中。它可以是 bool 类型作为标志。

你可以假设它在创建 Crossbow 时没有加载,所以在构造函数初始列表中,你只需添加 loaded(false)

然后你应该通过检查是否首先加载来改变你的“攻击”。如果没有加载,先重新加载一种重新加载功能:

void Crossbow::reload() {
if ( !loaded ) {
cout << "Crossbow loading ..." << endl;
loaded = true;
}
cout << "Crossbow reloaded" << endl;
}

void Crossbow::attack() {
if ( !loaded ) {
cout << "Crossbow not loaded! Please reload" << endl;
reload();
}
cout << "The crossbow hits for " << m_Damage << " points of damage" << endl;
loaded = false;
}

为此,您的攻击和重新加载不能是常量,因为函数中的值已更改。

现在您既可以调用 reload() 来重新加载,也可以调用 attack() 而不管它是否已加载。

关于c++ - 实现 "Reload"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18661909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com