【发布时间】:2013-01-17 07:39:08
【问题描述】:
简而言之,这就是我得到的。
我有一个基础项目类,药水、设备、法术等都从该类派生而来,并且从这些类派生了几个类,依此类推。注意:一些派生类具有非虚拟类特定的成员函数/数据类型。
我还创建了一个“随机”装甲/武器生成器。
我想要的是这样的库存:
struct Hero_Inventory
{
std::vector<Spell*> Spell_Inventory;
std::vector<Potion*> Potion_Inventory;
std::vector<Equipment*> Equipment_Inventory;
Hero_Inventory() {}
};
为我的法术和药水创建一个容器(库存)非常简单。因为它们将是预定义的。使用多态和指针不会有问题
我的主要问题是弄清楚如何存储和使用(例如访问武器类的特定成员函数)我随机生成的武器/盔甲(它们都来自 Equipment)。
我希望我的所有“设备”都放在一个容器中。
我在几个函数中生成我所有的设备,所以当我完成生成过程并最终得到如下结果时:
Equipment * TestArmor = new Armor(/* Bunch of parameters go here */);
我不知道如何处理它,因为一旦该函数超出范围,我就会失去该指针。如果没有指针/引用,我就不能使用多态性,这使我可以将我的设备全部保存在一个容器中。
此时我真的迷路了,我正在寻找人们可以提出的任何建议或替代方案。如果您需要更多代码,我会发布它,请告诉我您感兴趣的部分。
对不起,如果我含糊不清,这是我的第一篇文章。我通常很擅长自己解决问题,但这件事让我胜过。如果有人需要更多信息,请询问,我会尽力提供。
提前致谢, -瑞安
【问题讨论】:
-
这里的问题是什么?为什么不将其添加到
Equipment_Inventory? -
不要查询具体武器的属性,通过统一的界面告诉他们该做什么。他们可以决定他们能做什么。
-
@Karthik T:我无法添加它的原因是,一旦我的盔甲生成器功能完成,我的指针就会变成垃圾。因为那时,它现在超出了范围。对?我很确定动态内存就是这样工作的。
-
@RyanNolan:这不准确。指针超出范围,但只要该对象处于活动状态,就可以存储值(即您的
TestArmor对象的地址)。 -
@Peter Wood:这是解决问题的一种有趣方式。一个我以前没有考虑过的。我真的很喜欢使用多态性。我会看看我能想出什么。
标签: c++ polymorphism inventory