*我对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;
}
答案 0 :(得分:1)
结合使用工厂模式和构建器模式,您可以执行以下操作
#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();
}
};