#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>
using namespace std;
class Weapon; // 武器类前向声明
// 英雄类
class Hero {
private:
int attack; // 攻击力
int defense; // 防御力
int speed; // 速度
int health; // 生命值
public:
Hero(int attack = 0, int defense = 0, int speed = 0, int health = 0)
: attack(attack), defense(defense), speed(speed), health(health) {}
// 获取攻击力
int getAttack() const {
return attack;
}
// 设置攻击力
void setAttack(int attack) {
this->attack = attack;
}
// 获取防御力
int getDefense() const {
return defense;
}
// 设置防御力
void setDefense(int defense) {
this->defense = defense;
}
// 获取速度
int getSpeed() const {
return speed;
}
// 设置速度
void setSpeed(int speed) {
this->speed = speed;
}
// 获取生命值
int getHealth() const {
return health;
}
// 设置生命值
void setHealth(int health) {
this->health = health;
}
// 装备武器
void equipWeapon(Weapon* weapon);
// 显示英雄属性
void showStatus() const;
};
// 武器基类
class Weapon {
private:
int attack; // 攻击力
public:
Weapon(int attack = 0) : attack(attack) {}
// 获取攻击力
int getAttack() const {
return attack;
}
// 设置攻击力
void setAttack(int attack) {
this->attack = attack;
}
// 多态函数:装备武器
virtual void equip(int& , int& , int& , int& ) const = 0;
};
// 长剑类
class Sword : public Weapon {
private:
int healthBonus; // 生命值加成
public:
Sword(int attack = 0, int healthBonus = 0) : Weapon(attack), healthBonus(healthBonus) {}
// 获取生命值加成
int getHealthBonus() const {
return healthBonus;
}
// 设置生命值加成
void setHealthBonus(int healthBonus) {
this->healthBonus = healthBonus;
}
// 实现 equip 函数
void equip(int& heroAttack, int& heroDefense, int& heroSpeed, int& heroHealth) const override {
heroAttack += getAttack(); // 增加攻击力
heroHealth += healthBonus; // 增加生命值
}
};
// 匕首类
class Blade : public Weapon {
private:
int speedBonus; // 速度加成
public:
Blade(int attack = 0, int speedBonus = 0) : Weapon(attack), speedBonus(speedBonus) {}
// 获取速度加成
int getSpeedBonus() const {
return speedBonus;
}
// 设置速度加成
void setSpeedBonus(int speedBonus) {
this->speedBonus = speedBonus;
}
// 实现 equip 函数
void equip(int& heroAttack, int& heroDefense, int& heroSpeed, int& heroHealth) const override {
heroAttack += getAttack(); // 增加攻击力
heroSpeed += speedBonus; // 增加速度
}
};
// 斧头类
class Axe : public Weapon {
private:
int defenseBonus; // 防御力加成
public:
Axe(int attack = 0, int defenseBonus = 0) : Weapon(attack), defenseBonus(defenseBonus) {}
// 获取防御力加成
int getDefenseBonus() const {
return defenseBonus;
}
// 设置防御力加成
void setDefenseBonus(int defenseBonus) {
this->defenseBonus = defenseBonus;
}
// 实现 equip 函数
void equip(int& heroAttack, int& heroDefense, int& heroSpeed, int& heroHealth) const override {
heroAttack += getAttack(); // 增加攻击力
heroDefense += defenseBonus; // 增加防御力
}
};
// 装备武器
void Hero::equipWeapon(Weapon* weapon) {
weapon->equip(attack, defense, speed, health);
}
// 显示英雄属性
void Hero::showStatus() const {
cout << "攻击力: " << attack << ", 防御力: " << defense
<< ", 速度: " << speed << ", 生命值: " << health << endl;
}
int main() {
// 创建英雄
Hero hero(100, 50, 30, 500);
cout << "初始属性: ";
hero.showStatus();
// 创建武器
Sword sword(20, 100); // 长剑:攻击力 +20,生命值 +100
Blade blade(15, 10); // 匕首:攻击力 +15,速度 +10
Axe axe(30, 20); // 斧头:攻击力 +30,防御力 +20
// 装备长剑
hero.equipWeapon(&sword);
cout << "装备长剑后: ";
hero.showStatus();
// 装备匕首
hero.equipWeapon(&blade);
cout << "装备匕首后: ";
hero.showStatus();
// 装备斧头
hero.equipWeapon(&axe);
cout << "装备斧头后: ";
hero.showStatus();
return 0;
}