当前位置: 首页 > news >正文

多态 作业

Weapon 类:

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

Sword 类:继承Weapon 类,

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

Blade类:继承Weapon 类,

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

Hero类:

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

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

// 前向声明 Weapon 类
class Weapon;

// 英雄类
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); // 声明 equipWeapon 方法
    // 显示属性
    void showStats() const {
        cout << "英雄属性: " << endl
             << "攻击: " << attack << endl
             << "速度: " << speed << endl
             << "生命值: " << health << endl;
    }
};

// 武器基类
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(Hero& hero) const {
        hero.setAttack(attack + hero.getAttack()); // 默认只增加攻击力
    }
};

// Sword 类
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(Hero& hero) const override {
        Weapon::equip(hero); // 基类的 equip    
        hero.setHealth(healthBonus + hero.getHealth()); // 增加生命值
    }
};

// Blade 类
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(Hero& hero) const override {
        Weapon::equip(hero); // 基类的 equip    
        hero.setSpeed(speedBonus + hero.getSpeed()); // 增加速度
    }
};

// 实现 Hero 类的 equipWeapon 方法
void Hero::equipWeapon(Weapon* weapon) {
    weapon->equip(*this); // 传递当前对象
}

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;
}

相关文章:

  • apple watch真机开发第一步连接xcode详细教程,开启watch开发者模式真的很坑啊啊啊啊啊
  • 在Linux桌面上创建Idea启动快捷方式
  • 计算机网络之传输层(传输层的功能)
  • 设计模式 之 生产消费者模型 (C++)
  • 计算机网络之传输层(传输层提供的服务)
  • 现在有什么赛道可以干到退休?
  • VM虚拟机安装与配置Ubuntu Linux操作系统详细教程~
  • HBuilderx 插件开发变量名称翻译 ,中文转(小驼峰,大驼峰,下划线,常量,CSS类名)
  • Redis 高可用性:如何让你的缓存一直在线,稳定运行?
  • buuctf-简单注册器题解
  • uniapp h5页面获取跳转传参的简单方法
  • 全星FMEA软件系统是一款高效、智能的失效模式及影响分析工具,广泛应用于汽车、电子、机械等行业
  • LLC谐振变换器恒压恒流双竞争闭环simulink仿真
  • 内容中台的企业CMS架构是什么?
  • Rk3568驱动开发_驱动编写和挂载_2
  • SpringBoot整合Mybatis-Plus+Druid实现多数据源
  • DMA 定制固件教程:小白跟做即得单人固件,超详细纯喂饭教程,100% 成功秘籍!FPGA仿真1:1、中断逻辑和TLP核心都在。
  • Prometheus与Springboot
  • minio多主机分布式部署
  • 请解释 React 中的 Hooks,何时使用 Hooks 更合适?
  • 网站制作培训费用/如何营销推广自己的产品
  • wordpress迅雷插件下载/seo工具包括
  • 库尔勒网站建设/手机登录百度pc端入口
  • wordpress搭建多个购物网站/学生个人网页制作素材
  • 如何做服装的微商城网站/无锡百度推广公司哪家好
  • 浙江华企网站做的咋样/世界新闻最新消息