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

项目分析

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

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

比如说

cpp 复制代码
 protected:
int id;
string name;
int level;
};

不管哪里都会有这些重复性的代码,以及对应的获取函数 难道每次都写?

所以这就是需要继承,就好比前段时间受人指定的"科比"一句"老大"虽然是模仿,但科比的价值永远存在,模仿归模仿,你不可能超越,继承"意志"让人知道科比.布莱恩特,永远在我们心中, 就足够了

回过来再看看是不是有这些重复性的代码? 当然已经想到怎么优化的博友,这里请自己做一下

不知道,继承的小白直接问AI各大互联网公司产品,都有可以去试试 当然学计算机的一般都5g冲浪

不可能不知道,

也就是添加基类

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

virtual void  updateSubEntry()=0;

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

设计圣遗物组件基类

cpp 复制代码
//圣遗物组件
class ArtifactSetBonuses {
public:
    // 默认构造函数,创建一个ArtifactSetBonuses对象
    ArtifactSetBonuses() = default;

    // 默认析构函数,用于清理资源
    ~ArtifactSetBonuses() = default;
    
   // 获取圣遗物套装效果的唯一标识符
  int Id()const{
   // 检查对象是否为nullptr,如果是,则抛出异常 否则 返回圣遗物套装效果的ID
    return 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;
};

优化后

cpp 复制代码
#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;

};
相关推荐
li16709027012 分钟前
第二十七章:智能指针
c语言·数据结构·c++·visual studio
王老师青少年编程1 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【贪心与二分判定】:数列分段 Section II
c++·算法·贪心·csp·信奥赛·二分判定·数列分段 section ii
zh_xuan1 小时前
libcurl调用https接口
c++·libcurl
就叫飞六吧1 小时前
QT写一个桌面程序exe并动态打包基本流程(c++)
开发语言·c++
蜡笔小马1 小时前
1.c++设计模式-工厂模式
c++
汉克老师2 小时前
GESP2025年3月认证C++五级( 第三部分编程题(2、原根判断))
c++·算法·模运算·gesp5级·gesp五级·原根·分解质因数
winner88812 小时前
从零吃透C++命名空间、std、#include、string、vector
java·开发语言·c++
AI进化营-智能译站2 小时前
ROS2 C++开发系列07-高效构建机器人决策逻辑,运算符与控制流实战
开发语言·c++·ai·机器人
winner88812 小时前
C++ 命名空间、虚函数、抽象类、protected 权限全套通俗易懂精讲(附与 Java 对比)
java·开发语言·c++
不会编程的懒洋洋2 小时前
C# P/Invoke 基础
开发语言·c++·笔记·安全·机器学习·c#·p/invoke