2.25 c++ 综合练习【涉及类、继承、多态】

编写一个如下场景:
有一个英雄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 Weapon {
protected:
    int attackPower;
public:
    Weapon(int atk) : attackPower(atk) {}
    virtual ~Weapon() {}
    void setAttackPower(int atk) { attackPower = atk; }
    int getAttackPower() const { return attackPower; }
    virtual void equip(class Hero& hero) = 0; // 纯虚函数,多态实现
};

// 长剑类
class Sword : public Weapon {
private:
    int healthBonus;
public:
    Sword(int atk, int hp) : Weapon(atk), healthBonus(hp) {}
    void setHealthBonus(int hp) { healthBonus = hp; }
    int getHealthBonus() const { return healthBonus; }
    void equip(class Hero& hero) override;
};

// 匕首类
class Blade : public Weapon {
private:
    int speedBonus;
public:
    Blade(int atk, int spd) : Weapon(atk), speedBonus(spd) {}
    void setSpeedBonus(int spd) { speedBonus = spd; }
    int getSpeedBonus() const { return speedBonus; }
    void equip(class Hero& hero) override;
};

// 斧头类
class Axe : public Weapon {
private:
    int defenseBonus;
public:
    Axe(int atk, int def) : Weapon(atk), defenseBonus(def) {}
    void setDefenseBonus(int def) { defenseBonus = def; }
    int getDefenseBonus() const { return defenseBonus; }
    void equip(class Hero& hero) override;
};

// 英雄类
class Hero {
private:
    int attack;
    int defense;
    int speed;
    int health;
public:
    Hero(int atk, int def, int spd, int hp) : attack(atk), defense(def), speed(spd), health(hp) {}
    void setAttack(int atk) { attack = atk; }
    void setDefense(int def) { defense = def; }
    void setSpeed(int spd) { speed = spd; }
    void setHealth(int hp) { health = hp; }
    int getAttack() const { return attack; }
    int getDefense() const { return defense; }
    int getSpeed() const { return speed; }
    int getHealth() const { return health; }
    void equipWeapon(Weapon* w) { w->equip(*this); }
    void showStats() {
        cout << "Hero_Attack: " << attack << ", Defense: " << defense << ", Speed: " << speed << ", Health: " << health << endl;
    }
};

// 实现武器装备效果
void Sword::equip(Hero& hero) {
    hero.setAttack(hero.getAttack() + attackPower);
    hero.setHealth(hero.getHealth() + healthBonus);
    cout << "剑Attack +" << attackPower << ", Health +" << healthBonus << endl;
}

void Blade::equip(Hero& hero) {
    hero.setAttack(hero.getAttack() + attackPower);
    hero.setSpeed(hero.getSpeed() + speedBonus);
    cout << "匕首 Attack +" << attackPower << ", Speed +" << speedBonus << endl;
}

void Axe::equip(Hero& hero) {
    hero.setAttack(hero.getAttack() + attackPower);
    hero.setDefense(hero.getDefense() + defenseBonus);
    cout << "斧头 Attack +" << attackPower << ", Defense +" << defenseBonus << endl;
}

int main() {
    Hero hero(10, 5, 7, 100);
    hero.showStats();

    Sword sword(5, 20);
    Blade blade(3, 10);
    Axe axe(7, 15);

    hero.equipWeapon(&sword);
    hero.showStats();

    hero.equipWeapon(&blade);
    hero.showStats();

    hero.equipWeapon(&axe);
    hero.showStats();

    return 0;
}

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>
 
using namespace std;
 
class Hero;
 
// 武器基类
class Weapon {
private:
    int attack;
public:
    void setAttack(int val) { attack = val; }
    int getAttack() { return attack; }
 
    // 多态函数,装备武器时的行为
    virtual void equip(Hero* hero) = 0;
};
 
// 英雄类
class Hero {
private:
    int attack;
    int defense;
    int speed;
    int life;
public:
    void setAttack(int val) { attack = val; }
    void setDefense(int val) { defense = val; }
    void setSpeed(int val) { speed = val; }
    void setLife(int val) { life = val; }
 
    int getAttack() { return attack; }
    int getDefense() { return defense; }
    int getSpeed() { return speed; }
    int getLife() { return life; }
 
    // 装备武器函数
    void equipWeapon(Weapon* w) {
        w->equip(this); // 调用武器的equip函数,传入当前英雄对象
    }
 
    // 打印英雄属性
    void printStats() {
        cout << "英雄属性: " << endl;
        cout << "攻击值: " << attack << endl;
        cout << "防御值: " << defense << endl;
        cout << "速度值: " << speed << endl;
        cout << "生命值: " << life << endl;
    }
};
 
// 长剑类,继承自武器类
class Sword : public Weapon {
private:
    int lifeBonus; // 生命值加成
public:
    Sword(int attack, int lifeBonus) {
        setAttack(attack);
        this->lifeBonus = lifeBonus;
    }
 
    void setLifeBonus(int val) { lifeBonus = val; }
    int getLifeBonus() { return lifeBonus; }
 
    // 实现equip函数,装备长剑时增加英雄的攻击力和生命值
    void equip(Hero* hero) {
        hero->setAttack(hero->getAttack() + getAttack());
        hero->setLife(hero->getLife() + lifeBonus);
    }
};
 
// 匕首类,继承自武器类
class Blade : public Weapon {
private:
    int speedBonus; // 速度加成
public:
    Blade(int attack, int speedBonus) {
        setAttack(attack);
        this->speedBonus = speedBonus;
    }
 
    void setSpeedBonus(int val) { speedBonus = val; }
    int getSpeedBonus() { return speedBonus; }
 
    // 实现equip函数,装备匕首时增加英雄的攻击力和速度
    void equip(Hero* hero) {
        hero->setAttack(hero->getAttack() + getAttack());
        hero->setSpeed(hero->getSpeed() + speedBonus);
    }
};
 
// 斧头类,继承自武器类
class Axe : public Weapon {
private:
    int defenseBonus; // 防御力加成
public:
    Axe(int attack, int defenseBonus) {
        setAttack(attack);
        this->defenseBonus = defenseBonus;
    }
 
    void setDefenseBonus(int val) { defenseBonus = val; }
    int getDefenseBonus() { return defenseBonus; }
 
    // 实现equip函数,装备斧头时增加英雄的攻击力和防御力
    void equip(Hero* hero) {
        hero->setAttack(hero->getAttack() + getAttack());
        hero->setDefense(hero->getDefense() + defenseBonus);
    }
};
 
int main(int argc, const char** argv) {
    // 创建一个英雄
    Hero hero;
    hero.setAttack(10);
    hero.setDefense(5);
    hero.setSpeed(8);
    hero.setLife(100);
 
    // 打印初始属性
    cout << "初始化英雄属性:" << endl;
    hero.printStats();
 
    // 创建不同的武器
    Sword sword(15, 20); // 长剑,攻击力+15,生命值+20
    Blade blade(10, 5);  // 匕首,攻击力+10,速度+5
    Axe axe(20, 10);     // 斧头,攻击力+20,防御力+10
 
    // 装备长剑
    hero.equipWeapon(&sword);
    cout << endl << "装备长剑后:" << endl;
    hero.printStats();
 
    // 装备匕首
    hero.equipWeapon(&blade);
    cout << endl << "装备匕首之后:" << endl;
    hero.printStats();
 
    // 装备斧头
    hero.equipWeapon(&axe);
    cout << endl << "装备斧头之后:" << endl;
    hero.printStats();
 
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值