当前位置: 首页 > article >正文

C++ 多态小练习

编写一个如下场景:
有一个英雄Hero类,私有成员,攻击,防御,速度,生命值,以及所有的set get 方法
编写一个 武器 Weapon 类,拥有私有成员攻击力,以及set get 方法
编写一个 长剑 Sword 类,继承自武器类,拓展属性 生命值,以及set get 方法
编写一个 匕首Blade类,继承自武器类,拓展属性 速度,以及set get 方法
编写一个 斧头 Axe类,继承自武器类,拓展属性 防御力,以及set get 方法

武器Weapon类里面,要求有一个多态函数,叫做 equip 函数
英雄Hero类里面,要求有一个公开函数,equipWeapon(Weapon* w)
实现功能:英雄既可以装备长剑,也可以装备短剑,也可以装备斧头,但是要求装备不同的武器,英雄需要获得不同的属性加成

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <unistd.h>
#include <sstream>
#include <vector>
#include <memory>

using namespace std;                 

class Hero{
private:
	int attack;
	int defense;
	int speed;
	int health;
public:
	Hero(int a,int d,int s,int h):attack(attack),defense(defense),speed(speed),health(health)
	{
		attack=a;
		defense=d;
		speed=s;
		health=h;
	}

	void set_attack(int val){attack+=val;}
	void set_defense(int val){defense+=val;}
	void set_speed(int val){speed+=val;}
	void set_health(int val){health+=val;}

	int get_attack(){return attack;}
	int get_defense(){return defense;}
	int get_speed(){return speed;}
	int get_health(){return health;}

	void equipWeapon(class Weapon * w);

	void show()
	{
		cout<<"attack= "<<attack<<endl;
		cout<<"defense= "<<defense<<endl;
		cout<<"speed= "<<speed<<endl;
		cout<<"health= "<<health<<endl;
	}
};


class Weapon{
private:
	int attack;
public:
	Weapon():attack(50){}
	void set_attack(int val){attack=val;}
	int get_attack(){return attack;}

	virtual int* equip()=0;
};


class Sword:public Weapon{
private:
	int health;
public:

	Sword():health(50){}
	void set_health(int val){health=val;}
	int get_health(){return health;}
	
	int* equip()
	{
		int att=get_attack();
		int d=0;
		int s=0;
		int h=health;
		int* arr=new int[4]{att,d,s,h};
		return arr;
	}
};


class Blade:public Weapon{
private:
	int speed;
public:
	Blade():speed(50){}
	void set_speed(int val){speed=val;}
	int get_speed(){return speed;}

	int* equip()
	{
		int att=get_attack();
		int d=0;
		int s=speed;
		int h=0;
		int* arr=new int[4]{att,d,s,h};
		return arr;

	}
};


class Axe:public Weapon{
private:
	int defense;
public:
	void set_defense(int val){defense=val;}
	int get_defense(){return defense;}

	int* equip()
	{
		int att=get_attack();
		int d=defense;
		int s=0;
		int h=0;
		int* arr=new int[4]{att,d,s,h};
		return arr;

	}
};


void Hero::equipWeapon(class Weapon* w)
{
	int* data=w->equip();
	set_attack(data[0]);
	set_defense(data[1]);
	set_speed(data[2]);
	set_health(data[3]);

	delete[] data;
}

int main(int argc,const char** argv){
	Hero lwl(100,50,50,200);

	Sword sword;
	Blade blade;
	Axe axe;
	
	Weapon* w[4]={&sword,&blade,&axe};
	
	lwl.equipWeapon(w[0]);

	lwl.show();
}

运行截图:


http://www.kler.cn/a/561572.html

相关文章:

  • 短视频矩阵系统源码开发/矩阵系统OEM搭建
  • 贪心算法:JAVA从理论到实践的探索
  • Centos主机基础设置和网络网卡设置,安装ansible、docker(修改ip、uuid、主机名、关闭防火墙selinux和networkmanager)
  • [C]基础10.深入理解指针(2)
  • 探寻人工智能的领航之光
  • C++ Primer 算法概述
  • 2025版自动控制流程_工业级连接_智能重连监控系统_增强型工业连接协议 ‘s Vision+Robot EPSON
  • 机器学习数学通关指南——微积分基本概念
  • MacOS 终端选型
  • Visual Studio Code 远程开发方法
  • 安宝特方案 | 电力行业的“智能之眼”,AR重新定义高效运维!
  • 数据安全_笔记系列05:数据合规与隐私保护(GDPR、CCPA、中国《数据安全法》)深度解析
  • 【2025.2.25更新】wordpress免费AI插件,文章内容、图片自动生成、视频自动生成、网站AI客服、批量采集文章,内置deepseek联网满血版
  • 34.Java 阻塞队列(阻塞队列架构、阻塞队列分类、阻塞队列核心方法)
  • 算法精讲--动态规划(三):树形DP与状态机模型
  • 常见的keil 编译报警记录。
  • Windows Server 搭建 RADIUS 认证服务器
  • 【Leetcode】动态规划:从经典例题剖析解题精要
  • SQL进阶实战技巧:汽车转向次数分析 | 真实场景案例
  • 计算机网络之路由协议(OSPF路由协议)