C++多态

洗手液战神: 02-25 19:13:52 作业: 编写一个如下场景: 有一个英雄Hero类,私有成员,攻击,防御,速度,生命值,以及所有的set get 方法 编写一个 武器 Weapon 类,拥有私有成员攻击力,以及set get 方法 编写一个 长剑 Sword 类,继承自武器类,拓展属性 生命值,以及set get 方法 编写一个 匕首Blade类,继承自武器类,拓展属性 速度,以及set get 方法 编写一个 斧头 Axe类,继承自武器类,拓展属性 防御力,以及set get 方法 武器Weapon类里面,要求有一个多态函数,叫做 equip 函数 英雄Hero类里面,要求有一个公开函数,equipWeapon(Weapon* w) 实现功能:英雄既可以装备长剑,也可以装备短剑,也可以装备斧头,但是要求装备不同的武器,英雄需要获得不同的属性加成

cpp 复制代码
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>

using namespace std;

class Weapon{//武器
	private:
		int power;
	public:
		Weapon(int attack):power(attack){}
		virtual ~Weapon(){}

		void setPower(int attack){power=attack;}
		int getPower()const{return power;}
		virtual void equip(class Hero* hero)=0;
};

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(){return attack;}
		int getDefense(){return defense;}
		int getSpeed(){return speed;}
		int getHealth(){return health;}

		void equipWeapon(Weapon* w)
		{
			w->equip(this);
		}
};


class Sword:public Weapon{//长剑
	private:
		int extra_hp;
	public:
		Sword(int attack,int health):Weapon(attack),extra_hp(health){}

		void setExtra_hp(int health){extra_hp=health;}
		int getExtra_hp(){return extra_hp;}
		void equip(Hero* hero){
			hero->setAttack(hero->getAttack()+getPower());
			hero->setHealth(hero->getHealth()+extra_hp);
		}
};


class Blade:public Weapon{//匕首
	private:
		int extra_spd;
	public:
		Blade(int attack,int speed):Weapon(attack),extra_spd(speed){}

		void setExtra_spd(int speed){extra_spd=speed;}
		int getExtra_spd(){return extra_spd;}
		void equip(Hero* hero){
			hero->setAttack(hero->getAttack()+getPower());
			hero->setSpeed(hero->getSpeed()+extra_spd);
		}
};

class Axe:public Weapon{//巨斧
	private:
		int extra_def;
	public:
		Axe(int attack,int defense):Weapon(attack),extra_def(defense){}

		void setExtra_def(int defense){extra_def=defense;}
		int getExtra_def(){return extra_def;}
		void equip(Hero* hero){
			hero->setAttack(hero->getAttack()+getPower());
			hero->setDefense(hero->getDefense()+extra_def);
		}
};
int main(int argc,const char** argv){

	Hero hero(100,100,100,50);
	Sword sword(5, 20);
	Blade blade(3, 15);
	Axe axe(8, 10);

	hero.equipWeapon(&sword);
	std::cout << "装备长剑 - 攻击力: " << hero.getAttack()
		<< ", 生命值: " << hero.getHealth() << std::endl;

	hero.equipWeapon(&blade);
	std::cout << "装备匕首 - 攻击力: " << hero.getAttack()
		<< ", 速度: " << hero.getSpeed() << std::endl;

	hero.equipWeapon(&axe);
	std::cout << "装备巨斧 - 攻击力: " << hero.getAttack()
		<< ", 防御力: " << hero.getDefense() << std::endl;

}
相关推荐
虾球xz3 小时前
游戏引擎学习第268天:合并调试链表与分组
c++·学习·链表·游戏引擎
fpcc4 小时前
跟我学c++高级篇——模板元编程之十三处理逻辑
c++
格林威4 小时前
Baumer工业相机堡盟工业相机的工业视觉中为什么偏爱“黑白相机”
开发语言·c++·人工智能·数码相机·计算机视觉
Dream it possible!5 小时前
LeetCode 热题 100_只出现一次的数字(96_136_简单_C++)(哈希表;哈希集合;排序+遍历;位运算)
c++·leetcode·位运算·哈希表·哈希集合
Dddle17 小时前
C++:this指针
java·c语言·开发语言·c++
不見星空7 小时前
2025年第十六届蓝桥杯软件赛省赛C/C++大学A组个人解题
c语言·c++·蓝桥杯
jiunian_cn7 小时前
【c++】异常详解
java·开发语言·数据结构·c++·算法·visual studio
梁下轻语的秋缘7 小时前
每日c/c++题 备战蓝桥杯(洛谷P1387 最大正方形)
c语言·c++·蓝桥杯
熬夜学编程的小王7 小时前
【C++进阶篇】多态
c++·多态·静态绑定与动态绑定
UpUpUp……8 小时前
Linux--JsonCpp
linux·运维·服务器·c++·笔记·json