C++继承 多态

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

using namespace std;

class Weapon;
class Hero{
private:
	string Name;
	int Attack;
	int Defense;
	int Speed;
	int Health;
public:
	Hero():Name(""),Attack(0),Defense(0),Speed(0),Health(0){}

	void setName(string name)
	{
		Name = name;
	}
	void setAttack(int attcak)
	{
		Attack = attcak;
	}


	void setDefense(int defense)
	{
		Defense = defense;
	}


	void setSpeed(int speed)
	{
		Speed = speed;
	}


	void setHealth(int health)
	{
		Health = health;
	}
	string getName(){return Name;}

	int getAttack(){return Attack;}

	int getDefense(){return Defense;}

	int getSpeed(){return Speed;}


	int getHealth(){return Health;}
	void equipWeapon(Weapon* w);
};

class Weapon
{
	private:
		int Attack;
	public:
		Weapon(int attcak = 0 ):Attack(attcak){}
	void 	setAttack(int attcak)
		{
			Attack = attcak;
		}

	int	getAttack(){return Attack;}
		virtual void equip(Hero* hero){}
};


class Sword:public Weapon
{
	private:
		int Health;
	public:
		Sword(int health = 0):Health(health){}
		void setHealth(int health)
		{
			Health = health;
		}
		int getHealth(){return Health;}
		void equip(Hero* hero)
		{
			hero->setAttack(hero->getAttack() + getAttack());
			hero->setHealth(hero->getHealth() + Health);
		}
};

class Blade:public Weapon
{
	private:
		int Speed;
	public:
		Blade(int speed = 0):Speed(speed){}
		void setSpeed(int speed)
		{
			Speed = speed;
		}
		int getSpeed(){return Speed;}

		void equip(Hero* hero)
		{
			hero->setAttack(hero->getAttack() + getAttack());
			hero->setSpeed(hero->getSpeed() + Speed);
		}
};


class Axe:public Weapon
{
	private:
		int Defense;
	public:
		Axe(int defense = 0):Defense(defense){}
		void setDefense(int defense)
		{
			Defense = defense;
		}
		int getDefense(){return Defense;}
		void equip(Hero* hero)
		{
			hero->setAttack(hero->getAttack() + getAttack());
			hero->setDefense(hero->getDefense() + Defense);
		}
};

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

int main(int argc,const char** argv){
	//创建英雄
	Hero hero;
	hero.setName("亚索");
	hero.setAttack(51);
	hero.setDefense(18);
	hero.setSpeed(350);
	hero.setHealth(512);

	//创建长剑,装备武器
	Sword sword;
	sword.setAttack(20);
	sword.setHealth(50);
	hero.equipWeapon(&sword);
	cout << "装备长剑后" << endl;
	cout << "名称:" << hero.getName() << endl;
	cout << "攻击:" << hero.getAttack() << endl;
	cout << "防御:" << hero.getDefense() << endl;
	cout << "生命:" << hero.getHealth() << endl;
	cout << "速度:" << hero.getSpeed() << endl;
	cout << "-------------------------------" << endl;

	//创建匕首,装备武器
	Blade blade;
	blade.setAttack(30);
	blade.setSpeed(60);
	hero.equipWeapon(&blade);
	cout << "装备匕首后" << endl;
	cout << "名称:" << hero.getName() << endl;
	cout << "攻击:" << hero.getAttack() << endl;
	cout << "防御:" << hero.getDefense() << endl;
	cout << "生命:" << hero.getHealth() << endl;
	cout << "速度:" << hero.getSpeed() << endl;
	cout << "-------------------------------" << endl;
	//创建黑切,装备武器
	Axe axe;
	axe.setAttack(80);
	axe.setDefense(60);
	cout << "装备黑切后" << endl;
	cout << "名称:" << hero.getName() << endl;
	cout << "攻击:" << hero.getAttack() << endl;
	cout << "防御:" << hero.getDefense() << endl;
	cout << "生命:" << hero.getHealth() << endl;
	cout << "速度:" << hero.getSpeed() << endl;
	cout << "-------------------------------" << endl;
}

效果

相关推荐
Chiyamin10 分钟前
C++面向对象速览(三)
c++
Tadecanlan14 分钟前
[C++面试] 智能指针面试点(重点)续4
开发语言·c++·面试
Chiyamin15 分钟前
C++面向对象速览(一)
c++
GOTXX20 分钟前
BoostSiteSeeker项目实战
前端·c++·后端·mysql·搜索引擎·项目实战·boost
快乐点吧24 分钟前
【Word】批注一键导出:VBA 宏
开发语言·c#·word
胡乱儿起个名43 分钟前
C++的指针数组、数组指针和指针数组指针
开发语言·c++
kill bert1 小时前
第32周Java微服务入门 微服务基础
java·开发语言·微服务
学c真好玩1 小时前
4.1-python操作wrod/pdf 文件
开发语言·python·pdf
姜行运1 小时前
数据结构【链表】
c语言·开发语言·数据结构·链表
山山而川粤1 小时前
SSM考研信息查询系统
java·大数据·运维·服务器·开发语言·数据库·考研