gpt4 book ai didi

c++ - 有没有更好的方法来编写这个 C++ 代码

转载 作者:行者123 更新时间:2023-11-28 04:04:50 25 4
gpt4 key购买 nike

*我的 C++ 技能很少。我是一名 17 岁的程序员,正在尝试学习 C++。

我正在尝试制作一个有趣的项目来帮助我学习 C++。这段代码是该结果的一部分。我正在从名为 Weapon_definition 的设备基类创建派生类。在其中,我想将基类中的变量带入此类,并在调用某种武器时为它们赋予新值。因此,如果调用短剑,则武器类对象会更改其值。然后在另一个函数中调用这个武器类对象,明确目的是将其值复制到其他地方。库存系统几乎就是这一切。问题本身是这样的,有没有更好或更简单的方法来写这个?我以这种方式编写它的想法是我可以永远扩展它并且不需要太多代码来添加或删除部分。我可以使用新的外部类对象和类制作新的部分,例如可装备的珠宝或盔甲。

头文件

#ifndef EQUIPMENT_H
#define EQUIPMENT_H
#include <string>

class Equipment_definition{
public:
int value;
int growth;
std::string Tag;
std::string Title;
};

class Weapon_definition: public Equipment_definition{
public:
static void Short_Sword();
static void Long_Sword();
};

extern Weapon_definition Weapon;



#endif

CPP文件

#include "Equipment.h"

Weapon_definition Weapon;

void Weapon_definition::Short_Sword(){
Weapon.Title = "Shortsword";
Weapon.Tag = "[Light Weapon]";
Weapon.value = 2;
Weapon.growth = 1;
}

void Weapon_definition::Long_Sword(){
Weapon.Title = "Longsword";
Weapon.Tag = "[Heavy Weapon]";
Weapon.value = 5;
Weapon.growth = 0;
}

最佳答案

结合使用工厂模式和构建器模式,你可以做这样的事情

#include <string>

class Effect;
class Modifier;

class Equipment {
public:
class Builder final {
public:
Builder& setValue(int value);
Builder& setGrowth(int value);
Builder& setTitle(const std::string& title);
Builder& setTag(const std::string& tag);
Builder& addEffect(const Effect& effect);
Builder& addModifier(const Modifier& modifier);
Builder& copy(const Equipment& equipment);
Equipment build();
};
};

class EquipmentFactory {
public:
virtual void generateEquipment(Equipment::Builder& builder) = 0;
};

class ShortSwordFactory final : public EquipmentFactory {
public:
void generateEquipment(Equipment::Builder& builder) override {
builder.setValue(2)
.setGrowth(1)
.setTitle("Shortsword")
.setTag("[Light Weapon]");

// .addEffect(...)
// .addModifier();
}
};

class LongSwordFactory final : public EquipmentFactory {
public:
void generateEquipment(Equipment::Builder& builder) override {
builder.setValue(5)
.setGrowth(0)
.setTitle("Longsword")
.setTag("[Heavy Weapon]");

// .addEffect(...)
// .addModifier();
}
};

关于c++ - 有没有更好的方法来编写这个 C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58922660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com