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

C++中的继承

#include <iostream>
using namespace std;

// 武器类(基类)
class Weapon {
protected:
    int atk; // 攻击力

public:
    // 构造函数
    Weapon(int atk = 0) : atk(atk) {}

    // 虚拟析构函数
    virtual ~Weapon() {}

    // set 和 get 接口
    void setAtk(int atk) {
        this->atk = atk;
    }

    int getAtk() const {
        return atk;
    }
};

// 长剑类(继承自武器类)
class Sword : public Weapon {
private:
    int hp; // 生命

public:
    // 构造函数
    Sword(int atk = 0, int hp = 0) : Weapon(atk), hp(hp) {}

    // set 和 get 接口
    void setHp(int hp) {
        this->hp = hp;
    }

    int getHp() const {
        return hp;
    }
};

// 短剑类(继承自武器类)
class Blade : public Weapon {
private:
    int spd; // 速度

public:
    // 构造函数
    Blade(int atk = 0, int spd = 0) : Weapon(atk), spd(spd) {}

    // set 和 get 接口
    void setSpd(int spd) {
        this->spd = spd;
    }

    int getSpd() const {
        return spd;
    }
};

// 斧头类(继承自武器类)
class Axe : public Weapon {
private:
    int def; // 防御

public:
    // 构造函数
    Axe(int atk = 0, int def = 0) : Weapon(atk), def(def) {}

    // set 和 get 接口
    void setDef(int def) {
        this->def = def;
    }

    int getDef() const {
        return def;
    }
};

// 英雄类
class Hero {
private:
    int atk; // 攻击力
    int def; // 防御力
    int spd; // 速度
    int hp;  // 生命值
    Weapon* equippedWeapon; // 当前装备的武器

public:
    // 构造函数
    Hero(int atk = 0, int def = 0, int spd = 0, int hp = 0)
        : atk(atk), def(def), spd(spd), hp(hp), equippedWeapon(nullptr) {}

    // 装备武器
    void equipWeapon(Weapon* p) {
        equippedWeapon = p;
        // 根据不同的武器类型进行属性加成
        if (dynamic_cast<Sword*>(p)) {
            hp += static_cast<Sword*>(p)->getHp();
            atk += p->getAtk();
        } else if (dynamic_cast<Blade*>(p)) {
            spd += static_cast<Blade*>(p)->getSpd();
            atk += p->getAtk();
        } else if (dynamic_cast<Axe*>(p)) {
            def += static_cast<Axe*>(p)->getDef();
            atk += p->getAtk();
        }
    }

    // 输出当前英雄的属性
    void displayStats() const {
        cout << "Hero stats: "
             << "ATK: " << atk << ", "
             << "DEF: " << def << ", "
             << "SPD: " << spd << ", "
             << "HP: " << hp << endl;
    }
};

int main() {
    // 创建英雄
    Hero hero(10, 5, 3, 100);

    // 创建武器
    Sword sword(5, 20);   // 长剑:攻击力5,生命加成20
    Blade blade(4, 10);   // 短剑:攻击力4,速度加成10
    Axe axe(6, 15);       // 斧头:攻击力6,防御加成15

    // 装备不同的武器并显示英雄状态
    hero.equipWeapon(&sword);
    hero.displayStats();  // 长剑装备后

    hero.equipWeapon(&blade);
    hero.displayStats();  // 短剑装备后

    hero.equipWeapon(&axe);
    hero.displayStats();  // 斧头装备后

    return 0;
}

http://www.dtcms.com/a/107556.html

相关文章:

  • P2782 友好城市
  • 私有云(三)双节点部署openstack
  • 自学-C语言-基础-数组、函数、指针、结构体和共同体、文件
  • 111.在 Vue 3 中使用 OpenLayers 实现动态曲线流动图(类似 ECharts 迁徙状态)
  • 从代码学习深度学习 - 残差网络(ResNet)PyTorch版
  • MSVC编译遇到C2059、C2143、C2059、C2365、C2059等错误的解决方案
  • 打开pycharm显示编制索引后卡死
  • C++软件开发架构
  • llm-universe 踩坑记录
  • 数值与字典解决方案第二十五讲:数组的合并拆分及筛选
  • GNSS信号模拟器、导航信号模拟器、导航模拟信号源介绍
  • 如何解决 PyQt5 中的 `xcb` 插件加载错误
  • vue修饰符
  • ns-3使用animation出现文件小、无时间、打开后只有拓扑没有内容
  • 《静默与轰鸣的对决》
  • 什么是向量搜索Vector Search?
  • work03_1 实现一个简单的计算器,能够处理加法、减法、乘法和除法
  • 四、Bug篇+用例篇
  • Docker学习--容器操作相关命令--docker inspect 命令
  • C/C++指针核心难点全解析:从内存模型到实战避坑指南
  • AttributeError: module ‘smtplib‘ has no attribute ‘SMTP_SSL‘ 解决方法
  • AI小白的第十天:影响模型泛化能力的因素以及对策
  • spring boot 集成redis 中RedisTemplate 、SessionCallback和RedisCallback使用对比详解,最后表格总结
  • 系统思考与时间管理
  • 在MFC中使用Qt(五):MFC和Qt的共存和交互
  • 经典算法 最长公共子序列问题
  • GPU与CUDA对应
  • 阿里云服务器对接高防的时候可能会出现的问题
  • 鸿蒙应用元服务开发-Account Kit 常见问题说明
  • BRC认证是什么?如何获得BRC认证?对企业发展的好处