【继承多态】

news2024/12/23 4:36:05
#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;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1350994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【后端已完成,前端更新ing】uniapp+springboot实现个人备忘录系统【前后端分离】

目录 &#xff08;1&#xff09;项目可行性分析 &#xff08;一&#xff09;技术可行性&#xff1a; &#xff08;二&#xff09;经济可行性&#xff1a; &#xff08;三&#xff09;社会可行性&#xff1a; &#xff08;2&#xff09;需求描述 功能模块图 用例图&#…

谷歌推出了一种名为提示扩展(Prompt Expansion)的创新框架,旨在帮助用户更轻松地创造出既高质量又多样化的图像。

谷歌推出了一种名为提示扩展&#xff08;Prompt Expansion&#xff09;的创新框架&#xff0c;旨在帮助用户更轻松地创造出既高质量又多样化的图像。 论文标题: Prompt Expansion for Adaptive Text-to-Image Generation 论文链接: https://arxiv.org/pdf/2312.16720.pdf 问…

iCloud 备份 如何删除?

文章目录 Intro操作效果 浏览器端触发手机操作 Intro 前几天重置手机系统&#xff0c;不小心向 iCloud 推送了手机备份。 可是我用的是不需要这份备份&#xff0c;想要删除&#xff0c;可是常规入口找不到删除icloud中备份的按钮。 需要如下设备&#xff1a; 一台iphone &am…

新网域名外部入库流程

注册商是新网&#xff0c;且在新网管理的&#xff0c;请使用此教程外部入库。 如您的域名注册商是新网但在聚名管理&#xff0c;请参考教程&#xff1a;https://www.west.cn/faq/list.asp?unid2539 在外部入库操作之前&#xff0c;请先登录新网获取用户ID和绑定邮箱信息。…

CodeWave智能开发平台--02--目标:文档快速阅读

CodeWave智能开发平台的02次接触-实现快速了解CodeWave平台 CodeWave参考资源 网易数帆CodeWave开发者社区课程中心 网易数帆CodeWave开发者社区文档中心 CodeWave智能开发平台-文档快速阅读指北 大家如果看了本专栏中的第一篇博客&#xff0c;应该知道我接触CodeWave不久&a…

在vscode中创建任务编译module源文件

接昨天的文章 [创建并使用自己的C模块&#xff08;Windows10MSVC&#xff09;-CSDN博客]&#xff0c;觉得每次编译转到命令行下paste命令过于麻烦&#xff0c;于是研究了一下在vscode中创建自动编译任务。 经过尝试&#xff0c;在task.json中增加如下代码&#xff1a; {"…

ALSA学习(5)——ASoC架构中的Machine

参考博客&#xff1a;https://blog.csdn.net/DroidPhone/article/details/7231605 &#xff08;以下内容皆为原博客转载&#xff09; 文章目录 一、注册Platform Device二、注册Platform Driver三、初始化入口soc_probe() 一、注册Platform Device ASoC把声卡注册为Platform …

大发汽车紧急关闭日本4家工厂,停工时间延长至明年1月|百能云芯

大发汽车近期的生产线关闭引起了广泛关注&#xff0c;丰田汽车旗下的大发汽车公司因为不当测试和资料造假问题而被迫采取了紧急措施&#xff0c;关闭了其在日本的全部4家工厂的生产线。这一决定不仅对大发汽车本身产生潜在影响&#xff0c;还牵涉到数千家汽车零部件制造商及其员…

51单片机项目(26)——基于51单片机的超声波测距protues仿真

1.功能设计 用51单片机做的超声波测距系统&#xff0c;用的传感器是HCSR04&#xff0c;将距离实时显示在LCD1602屏幕上&#xff01;&#xff01;内含keil工程 完整的protues文件 可以运行&#xff01;&#xff01;&#xff01; 仿真截图&#xff1a;&#xff08;有一丢丢的误差…

【RocketMQ每日一问】RocketMQ5.0POP消费模式如何实现的?

1 什么是 Pop 消费 RocketMQ 5.0 中引入了一种新的消费模式&#xff1a;Pop 消费模式。 我们知道 RocketMQ 原来有两种消费模式&#xff1a;Pull 模式消费和 Push 模式消费&#xff0c;其中 Push 模式指的是 Broker 将消息主动“推送”给消费者&#xff0c;它的背后其实是消费…

【Java进阶篇】字符串常量、字符串常量池详解

字符串常量、字符串常量池详解 ✔️字符串常量池是如何实现的?✔️字符串常量从哪来的? ✔️字符串常量是什么时候进入到字符串常量池的? ✔️字符串常量池是如何实现的? 字符串常量池 (String Constant Pool) 是Java中一块特殊的内存区域&#xff0c;用于存储字符串常量。…

【052】基于Springboot、Vuey电影购票管理系统(附完整源码、数据库)

**基于Springboot、Vue、Mysql的电影购票管理系统&#xff08;附源码、数据库&#xff09;&#xff0c;超级完整的项目&#xff0c;值得下载&#xff01;&#xff01; 链接在博客最底下**电影购票管理系统源码及数据库百度云链接&#xff1a; https://pan.baidu.com/s/1loetDV…

Mnist手写体数字数据集介绍与在Pytorch中使用

1.介绍 MNIST&#xff08;Modified National Institute of Standards and Technology&#xff09;数据集是一个广泛用于机器学习和计算机视觉研究的常用数据集之一。它由手写数字图像组成&#xff0c;包括0到9的数字&#xff0c;每张图像都是28x28像素的灰度图像&#xff0c;图…

IO模型及高性能网络架构分析

IO调用 操作系统一次IO过程&#xff1a; 应用程序发起的一次IO操作包含两个阶段&#xff1a; IO调用&#xff1a;应用程序进程向操作系统内核发起调用。 IO执行&#xff1a;操作系统内核完成IO操作。 操作系统内核完成IO操作还包括两个过程&#xff1a; 准备数据阶段&#…

2023年终总结---做一个有生活的人

2023总结 【工作】2023一整年都在阿里淘天集团工作。作为工作的第二年&#xff0c;学习到很多知识和设计方法&#xff0c;从而某个中心的左膀右臂。敢在需求评审中说不&#xff0c;说话变的有底气。中间经历了组织架构的一次一次调整&#xff0c;当时面试自己的一个师兄因家庭原…

CSS-4

平面转换 整体认识 div {margin: 100px 0;width: 100px;height: 100px;background-color: pink;/* 过渡效果 */transition: all 1s;}/* 当鼠标悬停到div时&#xff0c;进行平面转换 */div:hover {transform: translate(800px) rotate(360deg) scale(2) skew(180deg);}作用&…

Python爬虫——使用代理IP池维护虚拟用户

目录 前言 一、什么是代理IP池&#xff1f; 二、爬取代理IP 三、验证代理IP的可用性 四、维护代理IP池 五、使用代理IP池进行爬取 六、总结 前言 在进行Web爬取时&#xff0c;使用代理IP是一种常见的策略&#xff0c;它可以帮助我们隐藏真实IP地址&#xff0c;绕过网站…

PyQT 多进程

在PyQt中&#xff0c;图形化界面&#xff08;GUI&#xff09;是运行在主线程中的&#xff0c;而多进程是在独立的进程中执行的。默认情况下&#xff0c;多进程之间是无法直接共享图形化界面的。 然而&#xff0c;有几种方法可以在多进程中与PyQt的图形化界面进行通信&#xff…

Wnmp本地部署结合内网穿透实现任意浏览器远程访问本地服务

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1…

Linux驱动开发学习笔记7《并发与竞争》

目录 一、并发与竞争 1、并发与竞争简介 2、保护内容是什么 二、原子操作 1、 原子操作简介 2、原子整形操作API 函数 3、原子位操作API 函数 4、实验 &#xff08;1&#xff09; 修改设备树文件 &#xff08;2&#xff09; LED 驱动修改 &#xff08;3&#xff09;…