【继承&多态】

#include <iostream>
#include <string>

int monster = 10000;  // 全局变量

class Hero {
protected:
    std::string name;
    int hp;
    int attack;

public:
    // 公有的无参构造函数
    Hero() : hp(100), attack(10) {}

    // 公有的有参构造函数
    Hero(const std::string& n, int h, int a) : name(n), hp(h), attack(a) {}

    // 虚成员函数
    virtual void Atk() {
        hp -= 0;
    }

    // 获取生命值的公有成员函数
    int GetHP() const {
        return hp;
    }
};

class Mage : public Hero {
private:
    int ap_attack;

public:
    // 构造函数
    Mage(const std::string& n, int h, int a, int ap) : Hero(n, h, a), ap_attack(ap) {}

    // 重写虚成员函数
    void Atk() override {
        hp -= (attack + ap_attack);
    }
};

class Archer : public Hero {
private:
    int ac_attack;

public:
    // 构造函数
    Archer(const std::string& n, int h, int a, int ac) : Hero(n, h, a), ac_attack(ac) {}

    // 重写虚成员函数
    void Atk() override {
        hp -= (attack + ac_attack);
    }
};

int main() {
    // 实例化对象
    Mage mage("Mage1", 100, 20, 50);
    Archer archer("Archer1", 100, 15, 100);

    // 循环攻击怪物,直到怪物被杀死
    while (monster > 0) {
        mage.Atk();
        archer.Atk();

        std::cout << "Mage's HP: " << mage.GetHP() << ", Archer's HP: " << archer.GetHP() << ", Monster's HP: " << monster << std::endl;

        if (mage.GetHP() <= 0 && archer.GetHP() <= 0) {
            std::cout << "英雄被杀死,野怪胜利" << std::endl;
            break;
        }

        if (monster <= 0) {
            std::cout << "野怪被杀死,英雄胜利!" << std::endl;
            break;
        }
    }

    return 0;
}

在这里插入图片描述

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值