项目分析
模拟原神圣遗物系统-小森设计项目,设计圣遗物(生之花,死之羽,时之沙,空之杯,理之冠)抽象类
为啥设计圣遗物组件基类(生之花,死之羽,时之沙,空之杯,理之冠)抽象类 有很多重复性的代码
比如说
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;
};