11.25c++继承、多态

ops/2024/11/28 13:01:38/

练习:

编写一个 武器类
class Weapon{int atk;
}编写3个武器派生类:短剑,斧头,长剑
class knife{int spd;
}class axe{int hp;
}class sword{int def;
}编写一个英雄类
class Hero{int atk;int def;int spd;int hp;
public:所有的get set 方法void equipWeapon(Weapon*)根据传入的武器不同,英雄获得不同的属性加成
}

代码实现: 

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <myhead.h>
using namespace std;  class Weapon;
class Hero{
private:int atk;int def;int spd;int hp;
public:Hero(int atk=0,int def=0,int spd=0,int hp=0):spd(spd),hp(hp),def(def),atk(atk){}void setAtk(int atk){this->atk=atk;	}void setSpd(int spd){this->spd=spd;}void setHp(int hp){this->hp=hp;}void setDef(int def){this->def=def;}int getAtk(){return this->atk;}int getSpd(){return this->spd;}int getHp(){return this->hp;}int getDef(){return this->def;}void equipweapon(Weapon* w);void showProptery(){cout << "h p=" << hp << endl;cout << "spd=" << spd << endl;cout << "def=" << def << endl;cout << "atk=" << atk << endl;cout << "-------------" << endl;}
};class Weapon{
private:int atk;
public:Weapon(int atk=0):atk(atk){}void setAtk(int atk){this->atk=atk;}int getAtk(){return this->atk;}virtual void addProptery(Hero& hero){}
};
class Knife:public Weapon{
private:int spd;
public:Knife(int atk=1,int spd=1):Weapon(atk),spd(spd){}void setSpd(int spd){this->spd=spd;}int getSpd(){return this->spd;}virtual void addProptery(Hero& hero){int atk=hero.getAtk()+this->getAtk();int spd=hero.getSpd()+this->spd;hero.setAtk(atk);hero.setSpd(spd);}};
class Axe:public Weapon{
private:int hp;
public:Axe(int atk=1,int hp=1):Weapon(atk),hp(hp){}void setHp(int hp){this->hp=hp;}int getHp(){return this->hp;}virtual void addProptery(Hero& hero){int atk=hero.getAtk()+this->getAtk();int hp=hero.getHp()+this->hp;hero.setAtk(atk);hero.setHp(hp);}
};
class Sword:public Weapon{
private:int def;
public:Sword(int atk=1,int def=1):Weapon(atk),def(def){}void setDef(int def){this->def=def;}int getDef(){return this->def;}virtual void addProptery(Hero& hero){int atk=hero.getAtk()+this->getAtk();int def=hero.getDef()+this->def;hero.setAtk(atk);hero.setDef(def);}
};
void Hero::equipweapon(Weapon* w){w->addProptery(*this);
}int main(int argc,const char **argv){Hero h1,h2,h3;Knife k;Sword s;Axe a;h1.equipweapon(&k);h2.equipweapon(&s);h3.equipweapon(&a);h1.showProptery();h2.showProptery();h3.showProptery();return 0;
}


http://www.ppmy.cn/ops/137362.html

相关文章

【closerAI ComfyUI】物体迁移术,flux三重控制万物一致性生图,赋能AI摄影电商摄影、模特换装、产品展示实用性强

添加图片注释,不超过 140 字(可选) 更多AI前沿科技资讯,请关注我们: 添加图片注释,不超过 140 字(可选) closerAIGCcloserAI,一个深入探索前沿人工智能与AIGC领域的资讯平台,我们旨在让AIGC渗入我们的工作与生活中,让我们一起探索AIGC的无限可能性!closerAI-一个…

DRM(数字权限管理技术)防截屏录屏----ffmpeg安装

提示&#xff1a;ffmpeg安装 文章目录 [TOC](文章目录) 前言一、下载二、配置环境变量三、运行ffmpeg四、文档总结 前言 FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的…

sklearn.ensemble

今天了解到ensemble&#xff0c;这是一个集成方法&#xff0c;通过组合多个单一模型来构建更强大的预测模型的技术。核心思想是“集体智慧”&#xff0c;即多个模型的组合通常比单个模型的性能更优。 两个著名的方法就是梯度提升树gradient-boosted trees和随机森林random fo…

构建Ceph分布式文件共享系统:手动部署指南

#作者:西门吹雪 文章目录 micro-Services-TutorialCeph分布式文件共享方案部署Ceph集群使用CephCeph在kubernetes集群中的使用 micro-Services-Tutorial 微服务最早由Martin Fowler与James Lewis于2014年共同提出&#xff0c;微服务架构风格是一种使用一套小服务来开发单个应…

【适配】屏幕拖拽-滑动手感在不同分辨率下的机型适配

接到一个需求是类似下图的3D多房间视角&#xff0c;需要拖拽屏幕 问题 在做这种屏幕拖拽的时候发现&#xff0c;需要拖拽起来有跟手的感觉&#xff0c;会存在不同分辨率机型的适配问题。 即&#xff1a;美术调整好了机型1的手感&#xff0c;能做到手指按下顶层地板上下挪动&…

综合解析:绝对路径与相对路径的定义、特性及在Windows与Linux系统中的应用

综合解析&#xff1a;绝对路径与相对路径的定义、特性及在Windows与Linux系统中的应用 在计算机系统中&#xff0c;文件和目录的位置可以通过路径来指定。路径分为两种主要类型&#xff1a;绝对路径和相对路径。这两种路径在不同操作系统&#xff08;如Windows和Linux&#xf…

JavaEE 【知识改变命运】03 多线程(2)

文章目录 复习1.1 进程和线程的区别1.2 线程创建的方式1.3 两者创建的区别 2 多线程2.1多线程的优势-增加了运行的速度2.2Thread类及常用的方法2.2.1常用见的构造方法2.2.2获取当前类的信息2.2.3Thread 的⼏个常⻅属性1 演示后台线程2 线程是否存活3 名称4 线程中断5 等待⼀个线…

[代码随想录Day24打卡] 93.复原IP地址 78.子集 90.子集II

93.复原IP地址 一个合法的IP地址是什么样的&#xff1a; 有3个’.分割得到4个数&#xff0c;每个数第一个数不能是0&#xff0c;不能含有非法字符&#xff0c;不能大于255。 这个是否属于合法IP相当于一个分割问题&#xff0c;把一串字符串分割成4部分&#xff0c;分别判断每…