【继承&多态】

2024-01-02 21:51:46
#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;
}

在这里插入图片描述

文章来源:https://blog.csdn.net/jpk010820/article/details/135349245
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。