c++day5

作业:

编写一个如下场景:

有一个英雄Hero类,私有成员,攻击,防御,速度,生命值,以及所有的set get 方法

编写一个 武器 Weapon 类,拥有私有成员攻击力,以及set get 方法

编写一个 长剑 Sword 类,继承自武器类,拓展属性 生命值,以及set get 方法

编写一个 匕首Blade类,继承自武器类,拓展属性 速度,以及set get 方法

编写一个 斧头 Axe类,继承自武器类,拓展属性 防御力,以及set get 方法

武器Weapon类里面,要求有一个多态函数,叫做 equip 函数

英雄Hero类里面,要求有一个公开函数,equipWeapon(Weapon* w)

实现功能:英雄既可以装备长剑,也可以装备短剑,也可以装备斧头,但是要求装备不同的武器,英雄需要获得不同的属性加成

复制代码
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>

using namespace std;

// 英雄
class Hero {
private:
    int Attack;
    int Defense;
    int Speed;
    int Health;
public:
    Hero(int Attack = 0, int Defense = 0, int Speed = 0, int Health = 0)
        : Attack(Attack), Defense(Defense), Speed(Speed), Health(Health) {}

    // 攻击力
    void setAttack(int attack) { Attack = attack; }
    int getAttack() { return Attack; }

    // 防御力
    void setDefense(int defense) { Defense = defense; }
    int getDefense() { return Defense; }

    // 敏捷力
    void setSpeed(int speed) { Speed = speed; }
    int getSpeed() { return Speed; }

    // 生命值
    void setHealth(int health) { Health = health; }
    int getHealth() { return Health; }

    // 英雄面板
    void show() {
        cout << "英雄: 陈育林" << endl;
        cout << "攻击力: " << Attack << endl;
        cout << "防御力: " << Defense << endl;
        cout << "敏捷力: " << Speed << endl;
        cout << "生命值: " << Health << endl;
    }
};

// 武器
class Weapon {
private:
    int Attack;
public:
    Weapon(int Attack = 0) : Attack(Attack) {}
    void setAttack(int attack) { Attack = attack; }
    int getAttack() { return Attack; }
    virtual void equip(Hero* hero) {
        hero->setAttack(hero->getAttack() + Attack);
    }
    virtual void unequip(Hero* hero) {
        hero->setAttack(hero->getAttack() - Attack);
    }
};

// 长剑
class Sword : public Weapon {
private:
    int Health;
public:
    Sword(int Attack = 0, int Health = 0) : Weapon(Attack), Health(Health) {}
    void setHealth(int health) { Health = health; }
    int getHealth() { return Health; }
    void equip(Hero* hero) override {
        Weapon::equip(hero);
        hero->setHealth(hero->getHealth() + Health);
    }
    void unequip(Hero* hero) override {
        Weapon::unequip(hero);
        hero->setHealth(hero->getHealth() - Health);
    }
};

// 匕首
class Blade : public Weapon {
private:
    int Speed;
public:
    Blade(int Attack = 0, int Speed = 0) : Weapon(Attack), Speed(Speed) {}
    void setSpeed(int speed) { Speed = speed; }
    int getSpeed() { return Speed; }
    void equip(Hero* hero) override {
        Weapon::equip(hero);
        hero->setSpeed(hero->getSpeed() + Speed);
    }
    void unequip(Hero* hero) override {
        Weapon::unequip(hero);
        hero->setSpeed(hero->getSpeed() - Speed);
    }
};

// 斧头
class Axe : public Weapon {
private:
    int Defense;
public:
    Axe(int Attack = 0, int Defense = 0) : Weapon(Attack), Defense(Defense) {}
    void setDefense(int defense) { Defense = defense; }
    int getDefense() { return Defense; }
    void equip(Hero* hero) override {
        Weapon::equip(hero);
        hero->setDefense(hero->getDefense() + Defense);
    }
    void unequip(Hero* hero) override {
        Weapon::unequip(hero);
        hero->setDefense(hero->getDefense() - Defense);
    }
};

// 英雄装备武器的函数
void equipWeapon(Hero& hero, Weapon* weapon) {
    weapon->equip(&hero);
}

int main(int argc, const char** argv) {
    Hero hero;
    Sword sword(20, 100); // 长剑:攻击力+20,生命值+100
    Blade blade(15, 50);  // 匕首:攻击力+15,速度+50
    Axe axe(30, 20);      // 斧头:攻击力+30,防御力+20

    cout << "初始属性:" << endl;
    hero.show();

    equipWeapon(hero, &sword);
    cout << "\n装备长剑后的属性:" << endl;
    hero.show();

    equipWeapon(hero, &blade);
    cout << "\n装备匕首后的属性:" << endl;
    hero.show();

    equipWeapon(hero, &axe);
    cout << "\n装备斧头后的属性:" << endl;
    hero.show();

    return 0;
}
相关推荐
unicrom_深圳市由你创科技12 分钟前
哪些控制逻辑应该放在 PLC,哪些放在上位机?
c++
asdfg12589631 小时前
JavaBean是什么?怎么理解?有什么用途?
java·开发语言
dsyyyyy11011 小时前
JavaScript变量
开发语言·javascript·ecmascript
‎ദ്ദിᵔ.˛.ᵔ₎1 小时前
双指针、滑动窗口、前缀和、二分查找 算法
算法
顾北顾1 小时前
多头注意力机制
人工智能·深度学习·算法
H178535090961 小时前
SolidWorks_基于草图的实体特征20_特征错误排查
算法·3d建模·solidworks
hujinyuan201602 小时前
2025年12月中国电子学会青少年机器人技术等级考试试卷(二级) 真题+答案
人工智能·算法·机器人
玖玥拾2 小时前
C/C++ 基础笔记(十三)继承
c语言·c++·继承
z落落2 小时前
C#WinForm 窗体切换与窗体传值(登录跳转案例)+WinForm 窗体传值(从上往下传、从下往上传)
开发语言·windows·c#
allway22 小时前
How to Echo Multiline to a File in Bash [3 Methods]
开发语言·chrome·bash