当前位置: 首页 > 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,生命加成20Blade blade(4, 10);   // 短剑:攻击力4,速度加成10Axe axe(6, 15);       // 斧头:攻击力6,防御加成15// 装备不同的武器并显示英雄状态hero.equipWeapon(&sword);hero.displayStats();  // 长剑装备后hero.equipWeapon(&blade);hero.displayStats();  // 短剑装备后hero.equipWeapon(&axe);hero.displayStats();  // 斧头装备后return 0;
}


http://www.mrgr.cn/news/96852.html

相关文章:

  • 推导Bias² + Variance + σ²_ε
  • 【11408学习记录】从混乱到清晰:还原+断开+简化,彻底攻破英语分裂式长难句
  • Spring Boot 工程创建详解
  • arcgis10.8 Toolbox中没有找到conversion tools模块
  • GitHub 趋势日报 (2025年04月01日)
  • Kubernetes 入门篇之 Node 安装与部署
  • Windows 实战-evtx 文件分析--做题笔记
  • Pycharm(十二)列表练习题
  • 视图函数的应用
  • SuperMap GIS基础产品FAQ集锦(20250402)
  • .Net8项目使用docker、docker-compose部署步骤
  • 3、nFR52xx蓝牙学习(点亮第一个LED灯)
  • 巧用临时对象之五
  • element-ui自制树形穿梭框
  • C++ 编程指南33 - 使用模板来表达适用于多种参数类型的算法
  • 基于React + Antd + Java的OFD文件上传预览实现方案(OFD文件转图片)
  • 对象和面向对象三大特征:封装
  • 黑马 C++ 学习笔记
  • Android 10.0 通过广播控制systemui状态栏动态显示和隐藏功能实现
  • Java 递归全解析:从原理到优化的实战指南