gpt4 book ai didi

C++:具有硬编码派生类的 ADT 基类与从文件输入构建的包罗万象的类

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

哪个设计更好:具有硬编码的具体派生类和实例的 ADT 基类,还是其实例从文件输入构建的包罗万象的类?

示例:

class ADTSpell {
ADTSpell(std::string name, int min_damage, int max_damage);
virtual ~ADTSpell()=0;
//...
};

class Fire : public ADTSpell {
Fire() : ADTSpell("Fire", 14, 15) { }
//...
};

/* Other concrete derived classes */

--或者--

class Spell {
Spell(std::string name, int min_damage, int max_damage, /*...*/ )
//...
};

File: Spells.txt
Fire 14 15
Heal -3 -5
Ice 5 8

最佳答案

KISS(保持简单)原则建议您只使用

struct Spell
{
std::string Type;
int MinDamage;
int MaxDamage;
};

要点很简单:您已经概括了所有法术。原则上,它们仅在名称上有所不同。参数(最小/最大)很容易存储为字段。所有这些都不需要高级多态性。

这些“咒语”的加载/保存代码不会比基于类的解决方案更难。

如果您需要更多参数(如射弹类型),它仍可能作为一个字段包含在该结构中。

更重要的是,如果您要通过网络传递此“类”的实例或尝试将它们编码到 Lua/Python/.NET/任何其他语言,您将考虑将 std::string 更改为 char Type[FIXED_SIZE ] 甚至是 int 类型(带有一些枚举)。

关于C++:具有硬编码派生类的 ADT 基类与从文件输入构建的包罗万象的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10839871/

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