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

C++ day6

一、练习题
        【编写一个如下场景】:
        有一个英雄Hero类,私有成员,攻击,防御,速度,生命值,以及所有的set,get 方法;
        编写一个 武器 Weapon 类,拥有私有成员攻击力,以及set,get 方法;
        编写一个 长剑 Sword 类,继承自武器类,拓展属性:生命值,以及set,get 方法;
        编写一个 匕首 Blade 类,继承自武器类,拓展属性:速度,以及set,get 方法;
        编写一个 斧头 Axe 类,继承自武器类,拓展属性:防御力,以及set,get 方法;

        武器 Weapon 类中,要求有一个多态函数,叫做 equip 函数;
        英雄 Hero 类中,要求有一个公开函数,equipWeapon(Weapon* w);
        

        【实现功能】:

        英雄既可以装备长剑,也可以装备匕首,也可以装备斧头。但是要求装备不同的武器后,英雄需要获得不同的属性加成。


【代码】:

#include <iostream>
using namespace std;

class Hero {
private:
    int attack;      // 攻击力
    int defense;     // 防御力
    int speed;       // 速度
    int health;      // 生命值

public:
    Hero() : attack(0), defense(0), speed(0), health(0) {}

    int get_attack() const { return attack; }
    int get_defense() const { return defense; }
    int get_speed() const { return speed; }
    int get_health() const { return health; }

    void set_attack(int a) { attack = a; }
    void set_defense(int d) { defense = d; }
    void set_speed(int s) { speed = s; }
    void set_health(int h) { health = h; }

    // 装备武器
    void equipWeapon(class Weapon* w);
};

// 武器基类
class Weapon {
private:
    int attack;

public:
    Weapon() : attack(0) {}

    int get_attack() const { return attack; }
    void set_attack(int a) { attack = a; }

    // 多态函数:装备武器
    virtual void equip(Hero& hero) {
        hero.set_attack(hero.get_attack() + attack);
    }
};

// 长剑类
class Sword : public Weapon {
private:
    int health;

public:
    Sword() : health(0) {}
    int get_health() const { return health; }
    void set_health(int h) { health = h; }

    // 重写 equip 函数
    void equip(Hero& hero) {
        Weapon::equip(hero); // 调用基类的 equip
        hero.set_health(hero.get_health() + health);
    }
};

// 匕首类
class Blade : public Weapon {
private:
    int speed;

public:
    Blade() : speed(0) {}
    int get_speed() const { return speed; }
    void set_speed(int s) { speed = s; }

    void equip(Hero& hero) {
        Weapon::equip(hero);
        hero.set_speed(hero.get_speed() + speed);
    }
};

// 斧头类
class Axe : public Weapon {
private:
    int defense;

public:
    Axe() : defense(0) {}
    int get_defense() const { return defense; }
    void set_defense(int d) { defense = d; }

    void equip(Hero& hero) {
        Weapon::equip(hero);
        hero.set_defense(hero.get_defense() + defense);
    }
};

// Hero 类的 equipWeapon 函数实现
void Hero::equipWeapon(Weapon* w) {
    w->equip(*this); // 调用武器的 equip 函数
}

int main() {
    Hero hero;
    hero.set_attack(100);
    hero.set_defense(50);
    hero.set_speed(30);
    hero.set_health(500);

    cout << "初始状态:" << endl;
    cout << "攻击力: " << hero.get_attack() << endl;
    cout << "防御力: " << hero.get_defense() << endl;
    cout << "速度: " << hero.get_speed() << endl;
    cout << "生命值: " << hero.get_health() << endl;
    cout << "-------------------" << endl;

    // 创建武器
    Sword sword;
    sword.set_attack(20);
    sword.set_health(100); // 长剑:攻击力 +20,生命值 +100

    Blade blade;
    blade.set_attack(15);
    blade.set_speed(10); // 匕首:攻击力 +15,速度 +10

    Axe axe;
    axe.set_attack(30);
    axe.set_defense(20); // 斧头:攻击力 +30,防御力 +20

    // 装备长剑
    hero.equipWeapon(&sword);
    cout << "装备长剑后:" << endl;
    cout << "攻击力: " << hero.get_attack() << endl;
    cout << "防御力: " << hero.get_defense() << endl;
    cout << "速度: " << hero.get_speed() << endl;
    cout << "生命值: " << hero.get_health() << endl;
    cout << "-------------------" << endl;

    // 装备匕首
    hero.equipWeapon(&blade);
    cout << "装备匕首后:" << endl;
    cout << "攻击力: " << hero.get_attack() << endl;
    cout << "防御力: " << hero.get_defense() << endl;
    cout << "速度: " << hero.get_speed() << endl;
    cout << "生命值: " << hero.get_health() << endl;
    cout << "-------------------" << endl;

    // 装备斧头
    hero.equipWeapon(&axe);
    cout << "装备斧头后:" << endl;
    cout << "攻击力: " << hero.get_attack() << endl;
    cout << "防御力: " << hero.get_defense() << endl;
    cout << "速度: " << hero.get_speed() << endl;
    cout << "生命值: " << hero.get_health() << endl;

    return 0;
}


相关文章:

  • 本地部署DeepSeek的硬件配置建议
  • 单目摄像头物体深度计算基础原理
  • SSL 证书是 SSL 协议实现安全通信的必要组成部分
  • js 判断数据是否为blob类型,blob数据转JSON和对象
  • selenium如何实现,开启浏览器的开发者工具模式,并且开启 toggle移动设备模拟模式
  • 大连指令数据集的创建--数据收集与预处理_02
  • DeepSeek05-大模型WebUI
  • 【从零开始学Redis】高级篇--超全总结笔记
  • [实现Rpc] 测试 | rpc部分功能联调 | debug | 理解bind
  • 倚光科技:助力玻璃非球面的打样与小批量生产
  • 06C语言——指针
  • 算法系列之递归反转单链表
  • k8s集群内的pod连接集群外部的mysql, k8s集群内部服务如何连接集群外部mysql? 一文搞明白
  • 设计模式总结
  • JVM系列--虚拟机类加载机制
  • 从零开始设计一个完整的网站:HTML、CSS、PHP、MySQL 和 JavaScript 实战教程
  • STM32【3】芯片的底层组成概论
  • 从 Linux 服务器到前端到网关到后端业务逻辑的分析
  • 基于Springboot的小说网站【附源码】
  • 开启 DeepSeek-R1 671B 模型
  • 坐标大零号湾科创策源区,上海瑞金医院闵行院区正式启动建设
  • 南宁一学校发生伤害案件,警方通报:嫌疑人死亡,2人受伤
  • 多个“首次”!上市公司重大资产重组新规落地
  • 张家界一铁路致17人身亡,又有15岁女孩殒命,已开始加装护栏
  • 淄博一酒店房间内被曝发现摄像头,当地警方已立案调查
  • 龚正市长调研闵行区,更加奋发有为地稳增长促转型,久久为功增强发展后劲