多态 作业

Weapon 类:

  • 私有成员(攻击力),
  • set get 方法,
  • 多态 equip 函数

Sword 类:继承Weapon 类,

  • 属性(生命值),
  • set get 方法

Blade类:继承Weapon 类,

  • 属性(速度),
  • set get 方法

Hero类:

  • 私有成员(攻击,防御,速度,生命值),
  • set get 方法,
  • equipWeapon(Weapon* w)公开函数

实现:英雄装备Sword、Blade,属性加成不同

// 武器 基类
class Weapon {
private:
    int attack; // 攻击力
public:
    Weapon(int attack = 0) : attack(attack) {}
    void setAttack(int attack) {        this->attack = attack;    }
    int getAttack() const {        return attack;    }
    // 多态函数:装备武器
    virtual void equip(int& heroAttack,int& heroSpeed, int& heroHealth) const {
        heroAttack += attack; // 默认只增加攻击力
    }
};
class Sword : public Weapon {
private:
    int healthBonus; // 生命值加成
public:
    Sword(int attack = 0, int healthBonus = 0) : Weapon(attack), healthBonus(healthBonus) {}
    // 设置生命值加成
    void setHealthBonus(int healthBonus) {        this->healthBonus = healthBonus;    }
    int getHealthBonus() const {        return healthBonus;    }
    // 重写
    void equip(int& heroAttack,int& heroSpeed, int& heroHealth) const override {
        Weapon::equip(heroAttack,heroSpeed, heroHealth); // 基类的 equip
        heroHealth += healthBonus; // 增加生命值
    }
};
class Blade : public Weapon {
private:
    int speedBonus; // 速度加成
public:
    Blade(int attack = 0, int speedBonus = 0) : Weapon(attack), speedBonus(speedBonus) {}
    // 设置速度加成
    void setSpeedBonus(int speedBonus) {        this->speedBonus = speedBonus;    }
    int getSpeedBonus() const {        return speedBonus;    }
    // 重写
    void equip(int& heroAttack,int& heroSpeed, int& heroHealth) const override {
        Weapon::equip(heroAttack,heroSpeed, heroHealth); 
        heroSpeed += speedBonus; // 增加速度
    }
};
// 英雄类
class Hero {
private:
    int attack;    // 攻击
    int speed;     // 速度
    int health;    // 生命值
public:
    Hero(int attack = 0,int speed = 0, int health = 0)
        : attack(attack),speed(speed), health(health) {}
    // 设置攻击
    void setAttack(int attack) {this->attack = attack;    }
    int getAttack() const {return attack;    }
    // 设置速度
    void setSpeed(int speed) {  this->speed = speed;    }
    int getSpeed() const {        return speed;    }
    // 设置生命值
    void setHealth(int health) {        this->health = health;    }
    int getHealth() const {        return health;    }
    // 装备武器
    void equipWeapon(Weapon* weapon) {
        weapon->equip(attack,speed, health); // 武器的 equip 函数
    }
    // 显示属性
    void showStats() const {
        cout << "英雄属性: " << endl
             <<"攻击: " << attack << endl
             << "速度: " << speed << endl
             << "生命值: " << health << endl;
    }
};
int main() {
    // 创建英雄
    Hero hero(100,30, 500);
    cout << "初始状态:" << endl;
    hero.showStats();
    // 创建武器
    Sword sword(20, 100); // 长剑:攻击 +20,生命值 +100
    Blade blade(15, 10);  // 匕首:攻击 +15,速度 +10

    hero.equipWeapon(&sword);
    cout << "装备长剑后:" << endl;
    hero.showStats();

    hero.equipWeapon(&blade);
    cout << "装备匕首后:" << endl;
    hero.showStats();
   
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

qt-C++笔记之QtCreator新建项目即Create Project所提供模板的逐个尝试

qt-C笔记之QtCreator新建项目即Create Project所提供模板的逐个尝试 code review! 文章目录 qt-C笔记之QtCreator新建项目即Create Project所提供模板的逐个尝试1.Application(Qt):Qt Widgets Application1.1.qmake版本1.2.cmake版本 2.Application(Qt):Qt Console Applicati…

学习threejs,Materials常量汇总

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️Materials常量汇总1.1.1 面…

SOC-ATF 安全启动BL1流程分析(1)

一、ATF 源码下载链接 1. ARM Trusted Firmware (ATF) 官方 GitHub 仓库 GitHub 地址: https://github.com/ARM-software/arm-trusted-firmware 这是 ATF 的官方源码仓库&#xff0c;包含最新的代码、文档和示例。 下载方式&#xff1a; 使用 Git 克隆仓库&#xff1a; git…

AI如何改变传统工厂的生产模式?

随着第四次工业革命的浪潮席卷全球&#xff0c;制造业的数字化转型成为企业在竞争中脱颖而出的关键。过去&#xff0c;传统制造业往往依赖于大量的人工操作和低效率的管理流程&#xff0c;而如今&#xff0c;智能化、自动化、数据化已经成为未来制造业的必由之路。从车间到云端…

Deepseek开源周第三天:DeepGEMM发布

Deepseek开源周第三天&#xff1a;DeepGEMM发布 前言 上周deepseek宣布&#xff0c;将在本周陆续发布五个开源项目&#xff0c;这些库已经在生产环境中经过了记录、部署和实战测试。 今天是deepseek开源周的第三天&#xff0c;deepseek发布了一个名为 DeepGEMM 的项目&#x…

【组态PLC】基于三菱西门子S7-200PLC和组态王液料混合系统组态设计【含PLC组态源码 M016期】

控制要求 总体控制要求&#xff1a;如面板图所示&#xff0c;本装置为三种液体混合模拟装置&#xff0c;由液面传感器SL1、SL2、SL3&#xff0c;液体A、B、C阀门与混合液阀门由电磁阀YV1、YV2、YV3、YV4&#xff0c;搅匀电机M&#xff0c;加热器H&#xff0c;温度传感器T组成。…

Qt Creator + CMake 构建教程

此教程基于: Qt 6.7.4Qt Creator 15.0.1CMake 3.26.4 Qt 6 以下的版本使用 CMake 构建可能会存在一些问题. 目录 新建窗体工程更新翻译添加资源软件部署(Deploy) 此教程描述了如何一步步在 Qt Creator 中使用 CMake 构建应用程序工程. 涉及 新建窗体工程, 更新翻译, 添加资源, …

内网渗透测试-Vulnerable Docker靶场

靶场来源&#xff1a; Vulnerable Docker: 1 ~ VulnHub 描述&#xff1a;Down By The Docker 有没有想过在容器中玩 docker 错误配置、权限提升等&#xff1f; 下载此 VM&#xff0c;拿出您的渗透测试帽并开始使用 我们有 2 种模式&#xff1a; - HARD&#xff1a;这需要您将 d…

【JavaEE】SpringMVC获取HTTP中的元素

目录 一、获取URL中的参数PathVariable二、上传⽂件RequestPart三、获取Cookie/Session3.1 HttpServletRequest和 HttpServletResponse3.2 获取Cookie3.2.1 使用HttpServletRequest3.2.2 使用注解CookieValue 3.3 设置session3.4 获取session3.4.1 使用HttpServletRequest3.4.2…

【构建工具】Gradle Kotlin DSL中的大小写陷阱:BuildConfigField

在Android开发当中&#xff0c;BuildConfig是一个非常有用的功能&#xff0c;它允许我们在构建过程中定义常量&#xff0c;并在运行时使用它们。But&#xff01;&#xff01;当我们从传统的Groovy DSL迁移到Kotlin DSL时或者被Android Studio坑的时候&#xff0c;有一些细微的差…

递归、搜索与回溯第二讲:二叉树中的深搜 穷举vs暴搜vs深搜vs回溯vs剪枝

递归、搜索与回溯第二讲&#xff1a;二叉树中的深搜 && 穷举vs暴搜vs深搜vs回溯vs剪枝 1.计算布尔二叉树的值2.求根节点到叶结点数字之和3.二叉树剪枝4.验证二叉搜索树5.二叉搜索树中第K小的元素6.二叉树的所有路径7.全排列8.子集 1.计算布尔二叉树的值 2.求根节点到叶…

可编辑PPT | DeepSeek如何赋能职场应用

这个PPT的核心内容是介绍DeepSeek如何赋能职场应用&#xff0c;从提示语技巧到多场景应用的详细解读。PPT首先介绍了DeepSeek的背景和团队&#xff0c;展示了其在AI领域的多项赛事奖项和研究成果&#xff0c;突出了其在人机协同和人机共生领域的专业能力。接着&#xff0c;PPT详…

网络层(Internet Layer)

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Linux 目录 &#x1f680; &#xff1a;&#x1f525; 前言 &#x1f98b; IP 地址&#xff1a;网络中的“门牌号”&#x1f98b; IP 地址的组成&#x1f98b; IPv4 到 IPv6 的过渡 一&#xff1a;…

final / 抽象类与抽象方法 / 接口

1. final 关键字 final&#xff1a;最终的 1.final可以用来修饰的结构&#xff1a;类&#xff0c;方法&#xff0c;变量 2.final用来修饰一个类&#xff1a;此类不能被其它类继承&#xff1b; 如 String类&#xff0c;System类&#xff0c;StringBuffer类 3.final用来修饰…

DeepSeek开源周Day1:FlashMLA引爆AI推理性能革命!

项目地址&#xff1a;GitHub - deepseek-ai/FlashMLA 开源日历&#xff1a;2025-02-24起 每日9AM(北京时间)更新&#xff0c;持续五天&#xff01; ​ 一、开源周震撼启幕 继上周预告后&#xff0c;DeepSeek于北京时间今晨9点准时开源「FlashMLA」&#xff0c;打响开源周五连…

9.编写负载均衡模块|编写judge功能|postman进行调试(C++)

编写负载均衡模块 代码整体结构 oj_control.hpp // code: #include... // input: "" void Judge(const std::string &number, const std::string in_json, std::string *out_json) {// 0. 根据题目编号&#xff0c;直接拿到对应的题目细节// 1. in_json进行反…

安装react报错

安装react报错 背景 执行命令npx create-react-app my-app&#xff0c;然后出现报错unable to resolve dependency tree 解决&#xff1a; 出现这个报错是因为依赖包版本出现冲突&#xff0c;查看package.json可以看到react版本是19.0.0&#xff0c;但是testing-library/rea…

CAD实现一键 面域转线(闭合多段线)——CAD c#二次开发

CAD中存在面域&#xff08;region&#xff09;&#xff0c;当用系统自带命令是&#xff0c;生成的是断开的直线Line。 此插件可实现面域转为闭合的多段线&#xff08;Polyline&#xff09;。效果如下&#xff1a; 一次转600个图形 部分代码如下&#xff1a; public class 面…

快速理解Raft分布式共识算法

目录 拜占庭将军问题 Raft算法是干什么的&#xff1f; 一、领导选举&#xff08;选老板&#xff09; 二、日志复制&#xff08;发通知&#xff09; 三、安全性&#xff08;防篡改&#xff09; &#x1f330; 举个真实例子 ✔️ Raft的优势 基础 状态机 节点类型 任期…

Python学习第十七天之PyTorch保姆级安装

PyTorch安装与部署 一、准备工作二、pytorch介绍三、CPU版本pytorch安装1. 创建虚拟环境2. 删除虚拟环境1. 通过环境名称删除2. 通过环境路径删除 3. 配置镜像源4. 安装pytorch1. 首先激活环境变量2. 进入pytorch官网&#xff0c;找到安装指令 5. 验证pytorch是否安装成功 四、…