11.25c++继承、多态

news/2024/11/29 9:18:17/

练习:

编写一个 武器类
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/news/1550866.html

相关文章

QT6学习第四天 感受QT的文件编译

QT6学习第四天 感受QT的文件编译 使用纯代码编写程序新建工程 使用其他编辑器纯代码编写程序并在命令行运行使用 .ui 表单文件生成界面使用自定义 C 窗口类使用现成的QT Designer界面类 使用纯代码编写程序 我们知道QT Creator中可以用拖拽的方式在 .ui 文件上布局&#xff0c…

在 Ubuntu 上部署 MediaWiki 开源维基平台

MediaWiki 是一个功能强大的开源维基软件&#xff0c;全球众多组织使用它来创建协作文档网站。本文将指导你如何在 Ubuntu 服务器上安装 MediaWiki&#xff0c;使用 Nginx 作为 Web 服务器&#xff0c;PostgreSQL 作为数据库管理系统。 简介 MediaWiki 是一个灵活且强大的维基…

【vue-router】vue-router如何实现动态路由

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

常用Python集成开发环境(IDE)

好的工具可以帮助我们提高开发效率和质量&#xff0c;给大家介绍几个常用的 Python 集成开发环境&#xff08;IDE&#xff09;。 Visual Studio Code Visual Studio Code &#xff0c;简称 VS Code&#xff0c;是一款由微软开发的开源代码编辑器&#xff0c;它支持多种编程语…

【工具变量】中国省级农村创业活跃度数据(2000-2022年)

一、测算方式&#xff1a;参考《金融与经济》黄敦平&#xff08;2023&#xff09;老师研究的做法&#xff0c;农村创业活跃度&#xff08;REP&#xff09;利用农村私营企业就业人数和个体就业人数之和与乡村人口总数的比重衡量农村创业活跃度&#xff0c;该比值越大&#xff0c…

前端页面或弹窗在线预览文件的N种方式

需求&#xff1a;后端返回给前端一个地址后&#xff0c;在前端页面上或则在弹框中显示在线的文档、表格、图片、pdf、video等等&#xff0c;嵌入到前端页面 方式一&#xff1a; 使用vue-office 地址&#xff1a;vue-office简介 | vue-office 个人感觉这个插件是最好用的&#x…

C语言蓝桥杯组题目

系列文章目录 文章目录 系列文章目录前言题目第一题.1, 2, 3, 4 能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f;第二题: 一个整数&#xff0c;它加上100后是一个完全平方数&#xff0c;再加上168又是一个完全平方数&#xff0c;请问该数是多少&…

Maven 无法打包Springboot项目解决方法

问题1 JAR will be empty - no content was marked…&#xff1b; repackage failed: Unable to find main class 用生命周期里的东西进行打包而不是插件里面。 jar中没有主清单属性 java -jar xxx-0.0.1-SNAPSHOT.jar 没有主清单属性 Unable to access jarfile dddl-0.0.1-SN…