模拟原神圣遗物系统-小森设计项目,设计圣遗物组件基类(生之花,死之羽,时之沙,空之杯,理之冠)父类,并且优化圣遗物

项目分析

模拟原神圣遗物系统-小森设计项目,设计圣遗物(生之花,死之羽,时之沙,空之杯,理之冠)抽象类

为啥设计圣遗物组件基类(生之花,死之羽,时之沙,空之杯,理之冠)抽象类 有很多重复性的代码
比如说

 protected:
int id;
string name;
int level;
};

不管哪里都会有这些重复性的代码,以及对应的获取函数 难道每次都写?
所以这就是需要继承,就好比前段时间受人指定的“科比”一句“老大”虽然是模仿,但科比的价值永远存在,模仿归模仿,你不可能超越,继承“意志”让人知道科比.布莱恩特,永远在我们心中, 就足够了
回过来再看看是不是有这些重复性的代码? 当然已经想到怎么优化的博友,这里请自己做一下
不知道,继承的小白直接问AI各大互联网公司产品,都有可以去试试 当然学计算机的一般都5g冲浪
不可能不知道,

也就是添加基类

基类:  圣遗物组件
属性:ID,name level
以及对应的获取方法,以及纯虚函数(这个写不写都无所谓,应该没有关系)
virtual string SubEntry()=0;virtual void  updateSubEntry()=0;

总而言之不要,试图强加就行

设计圣遗物组件基类

//圣遗物组件
class ArtifactSetBonuses {
public:// 默认构造函数,创建一个ArtifactSetBonuses对象ArtifactSetBonuses() = default;// 默认析构函数,用于清理资源~ArtifactSetBonuses() = default;// 获取圣遗物套装效果的唯一标识符int Id()const{// 检查对象是否为nullptr,如果是,则抛出异常 否则 返回圣遗物套装效果的IDreturn this?id :throw runtime_error("这是一个空指针");}// 获取圣遗物套装效果的圣遗物名称string Name( )const {// 检查对象是否为nullptr,如果是,则抛出异常 否则 返回圣遗物套装效果的圣遗物名称return this?name :throw runtime_error("这是一个空指针");}// 获取圣遗物套装效果的当前等级int Level() const{// 检查对象是否为nullptr,如果是,则抛出异常 否则 返回圣遗物套装效果的当前等级return this?level :throw runtime_error("这是一个空指针");      }protected:// 圣遗物套装效果的唯一标识符int id;// 圣遗物套装效果的名称string name;// 圣遗物套装效果的等级int level;
};

优化后

#include<exception>
//class ArtifactSetBonuses {public:ArtifactSetBonuses()=default;~ArtifactSetBonuses()=default;int Id()const{return this?id :throw runtime_error("这是一个空指针");}string Name( )const {return this?name :throw runtime_error("这是一个空指针");}int Level() const{return this?level :throw runtime_error("这是一个空指针");      }
protected:int id;string name;int level;};class  flowerOfLife :public ArtifactSetBonuses {
public:flowerOfLife()=delete;flowerOfLife(int id,string name,int HealthPoints);virtual ~flowerOfLife(){};virtual  int  HealthPoints();virtual string SubEntry()=0;virtual void  updateSubEntry()=0;protected:int healthPoints;
};class  Plumeofdeath  :public ArtifactSetBonuses   {
public:Plumeofdeath()=default;Plumeofdeath(int id,string name,int Level,int atk);virtual ~Plumeofdeath(){};
virtual  int  ATK()=0;virtual string SubEntry()=0;virtual void  updateSubEntry()=0;protected:int atk;
};class sandsofTime :public ArtifactSetBonuses{
public:sandsofTime()=default;sandsofTime(int id,string name,int Level);virtual ~sandsofTime(){}//攻击沙
virtual void setATK(float );
virtual float atk(){return 0.0 ;};
//防御沙
virtual void setDefense(float );
virtual float Defense(){return 0.0 ;};
//生命沙
virtual void sethealthPoints(float );
virtual float healthPoints(){return 0.0 ;};
//元素充能 
virtual void setEnergyRecharge(float );
virtual float EnergyRecharge(){return 0.0 ;};
//元素精通
virtual void setEnergyRecharge(int );
virtual int ElementalMastery(){return 0;};virtual string SubEntry()=0;virtual void  updateSubEntry()=0;};class emptyCup :public ArtifactSetBonuses {emptyCup()=default;emptyCup(int id,string name);virtual ~emptyCup(){};/*火伤
水伤
草伤
雷伤
风伤
冰伤
岩伤
物伤
攻击
防御
生命
元素精通*/// 设置火伤属性 主词条virtual void setFireinjury(float fireInjury) {}// 获取火伤属性 主词条virtual float Fireinjury() { return 0.0; }// 设置水伤属性 主词条virtual void setWaterinjury(float waterInjury) {}// 获取水伤属性 virtual float Waterinjury() { return 0.0; }// 设置草伤属性 主词条virtual void setGrassinjury(float grassInjury) {}// 获取草伤属性主词条virtual float Grassinjury() { return 0.0; }// 设置雷伤属性主词条virtual void setthunderinjury(float thunderInjury) {}// 获取雷伤属性主词条virtual float thunderinjury() { return 0.0; }// 设置风伤属性主词条virtual void setWindinjury(float windInjury) {}// 获取风伤属性主词条virtual float Windinjury() { return 0.0; }// 设置冰伤属性主词条virtual void setIceinjury(float iceInjury) {}// 获取冰伤属性主词条virtual float Iceinjury() { return 0.0; }// 设置岩伤属性 主词条virtual void setRockinjury(float rockInjury) {}// 获取岩伤属性 主词条virtual float Rockinjury() { return 0.0; }// 设置物伤属性 主词条virtual void setPhysicalinjury(float physicalInjury) {}// 获取物伤属性 主词条virtual float Physicalinjury() { return 0.0; }// 设置攻击力 主词条virtual void setAttack(float attack) {}// 获取攻击力 主词条virtual float Attack() { return 0.0; }// 设置防御力 主词条virtual void setDefense(float defense) {}// 获取防御力 主词条virtual float Defense() { return 0.0; }// 设置生命 主词条virtual void setLife(float life) {}// 获取生命 主词条virtual float Life() { return 0.0; }// 设置元素精通主词条virtual void setElementsMastery(int mastery) {}// 获取元素精通主词条virtual int elementsMastery() { return 0; }virtual string SubEntry()=0;virtual void  updateSubEntry()=0;};class CrownOfReason:  public ArtifactSetBonuses{public:
CrownOfReason()=default;CrownOfReason(int id,string name);virtual ~CrownOfReason(){};// 设置攻击力主词条virtual void setAttack(float attack) {}// 获取攻击力冠virtual float Attack() { return 0.0; }// 设置防御主词条virtual void setDefense(float defense) {}// 获取防御主词条virtual float Defense() { return 0.0; }// 设置生命主词条virtual void setLife(float life) {}// 获取生命主词条virtual float Life() { return 0.0; }// 设置元素精通主词条virtual void setElementsMastery(int mastery) {}// 获取元素精通主词条virtual int elementsMastery() { return 0; }virtual string SubEntry()=0;virtual void  updateSubEntry()=0;};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/32006.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发国外客户的软件

开发国外客户的软件通常需要考虑多个方面&#xff0c;包括目标市场的特点、客户需求、产品功能以及营销策略等。以下是一些关键点和建议&#xff0c;用于开发针对国外客户的软件&#xff1a; 市场调研与分析&#xff1a; 确定目标市场&#xff1a;通过市场调研&#xff0c;明确…

【CPP】插入排序、希尔排序

目录 1.插入排序1.1直接插入排序简介代码分析 1.2直接插入对比冒泡排序简介代码对比分析(直接插入排序与冒泡的复杂度效率区别) 1.3希尔排序简介代码分析 1.插入排序 基本思想&#xff1a;把一个待排数字按照关键码值插入到一个有序序列中&#xff0c;得到一个新的有序序列。 …

前沿技术丨S2S自动化测试解决方案

技术背景 随着面向服务的架构&#xff08;Service-Oriented Architecture&#xff0c;SOA&#xff09;在整车架构中的逐步推进及应用&#xff0c;车内网络通信中会一直并存基于以太网的面向服务和基于传统网络的面向信号的两类控制器&#xff0c;S2S&#xff08;Signal to Ser…

AXI学习笔记

文章目录 AXI口诀&#xff1a;AXI三种总线&#xff0c;三种接口&#xff0c;一个协议背景知识一、 AMBA&#xff1a;二、AXI2.1 通信协议与握手机制2.2 AXI协议特点2.3 三种AXI总线类型&#xff08;AXI4、AXI4-lite、AXI4-stream&#xff09;2.3.1 AXI通道&#xff08;5通道&am…

GD32 MCU的选项字节是什么?

GD32 MCU的选项字节是什么&#xff0c;有什么功能呢&#xff1f;选项字节被误篡改如何回复&#xff1f; 读者朋友们是否会有以上的疑问&#xff0c;首先我们先为大家介绍选项字节是什么以及选项字节的功能。 以GD32F30X系列MCU为例&#xff0c;其选项字节说明如下表所示&…

烦死了。没完的垃圾。

赶紧结束吧受不了了。

Spring Boot框架的原理及应用详解(七)

本系列文章简介&#xff1a; 在当今的软件开发世界中&#xff0c;快速迭代、高效开发以及易于维护成为了开发者们不断追求的目标。Spring Boot作为Spring框架的一个子项目&#xff0c;自其诞生以来就凭借其“约定大于配置”的理念和自动配置的特性&#xff0c;迅速在Java开发社…

第11天:API开发与REST framework

第11天&#xff1a;API开发与REST framework 目标 使用Django REST framework构建RESTful API。 任务概览 学习序列化器的概念和使用方法。创建API视图和路由。实现API的权限和认证。 详细步骤 1. 学习序列化器 序列化器是Django REST framework中用于数据转换的组件&am…

详解mysql安装、常见问题及解决方法

一、MySQL 简介 MySQL 是一个广泛使用的开源关系型数据库管理系统 (RDBMS)&#xff0c;由瑞典公司 MySQL AB 开发&#xff0c;后被 Sun Microsystems 收购&#xff0c;最终归属 Oracle 公司所有。它以其快速、可靠、可扩展的特性而闻名&#xff0c;并且因其开源的性质在各类应…

力扣每日一题 6/22 字符串/贪心

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 2663.字典序最小的美丽字符串【困难】 题目&#xff1a; 如果一个字符串满…

在每个Pod中执行命令

查看文件中某个值 v1 for pod in $(kubectl get pod -oname -A |grep vastbase ); do base_name$(echo "$pod" | sed s|pod/|| | sed s/-[0-9]\-[0-9]\$//)json_path"/pgdata/data/$base_name/has.dynamic.json"max_connections$(ka exec -it "$pod…

2024年7月JLPT日语N1真题试卷和答案解析,《Navi日语社》小程序在线答题考试,你的专属考试助手,日语学习神器!

掌握日语&#xff0c;从日语社小程序开始。这款小程序专为日语学习者设计&#xff0c;提供全面的JLPT备考资源&#xff0c;包括日语N1至N5等级考试的历年真题和2024年最新题目。无论你是日语新手还是备考高手&#xff0c;都能在这里找到适合自己的学习路径。 核心功能&#xf…

Flutter 应用加速之本地缓存管理

前言 村里的老人说&#xff1a;“不会写缓存器的码农不是好程序员。” 今天我们就来讲讲如何编写一个简单又通用的缓存管理模块。 需求分析 根据以往经验&#xff0c;每一个缓存器&#xff0c;除了要保持被缓存数据/对象之外&#xff0c;还需要同时记录两个与之紧密相关的时…

uniapp 打包 H5 实现在 uniapp 打包 APP 的 webview 通信

一、前言 遇到 uniapp 打包的 APP 在 webview 内嵌入 uniapp 打包的 H5 页面的需求&#xff0c;并实现通信。本篇主要总结了如何实现并总结遇到的问题&#xff0c;希望可以帮助大家减少负担。 实现需求主要有三个地方需要处理&#xff1a; index.html 的打包配置导入 uni.we…

IOS Swift 从入门到精通:数组,集合,元组,对比,字典,枚举

目录 数组 集合 元组 Arrays vs sets vs tuples 字典 字典默认值 创建空集合 枚举 枚举关联值 枚举原始值 复杂类型&#xff1a;总结 数组 数组是存储为单个值的值的集合。例如&#xff0c;John、Paul、George 和 Ringo 是姓名&#xff0c;但数组可让您将它们分组为…

外贸真相:外贸依然属于高薪行业

转自&#xff1a;外贸人Vicky 大家好&#xff0c;我是你们的外贸博主&#xff0c;一个拥有12年外贸经验的外贸人。今天&#xff0c;我要跟大家深入聊聊如何在这个充满挑战和机遇的行业中实现高薪梦想 首先&#xff0c;让我们从我初入外贸行业的故事开始。那时候&#xff0c;我…

富格林:严格阻挠防备欺诈陷阱

富格林悉知&#xff0c;在投资领域中&#xff0c;现货黄金交易因其保值属性和全球流动性而备受青睐。然而&#xff0c;要想在这一市场中取得成功&#xff0c;投资者不仅需要了解基本的市场知识&#xff0c;更要学会如何阻挠防备欺诈陷阱。以下是一些有助于大家阻挠防备欺诈陷阱…

书生·浦语大模型LagentAgentLego智能体应用搭建 第二期

文章目录 智能体概述智能体的定义智能体组成智能体范式 环境配置Lagent&#xff1a;轻量级智能体框架实战Lagent Web Demo用 Lagent 自定义工具 AgentLego&#xff1a;组装智能体“乐高”直接使用AgentLego作为智能体工具使用 用 AgentLego 自定义工具 智能体概述 智能体的定义…

网络编程之XDP技术的基础eBPF

一、XDP和TC的技术支撑 在前面分析了XDP和TC技术&#xff0c;从它们的细节里可以看出&#xff0c;它们都在调用eBPF的钩子函数。那么eBPF是什么呢&#xff1f;在2021年曾经写过一篇《eBPF介绍》的初级文章&#xff0c;对eBPF做了一个入门级的普及。但是未曾在技术层面上进行展…

win制作git局域网仓库,克隆

仓库目录制作成共享文件 共享目录\USER-20230725LO 然后win使用git克隆\USER-20230725LO\git\wbrj