我有一个库存系统,用于存储“项目”类型,这是一个抽象类。我有一个名为“Skates”的派生类。该程序允许用户将“Skates”添加到“Item”指针的 vector 中。用户输入溜冰鞋的型号和ID,然后创建一个“Skates”对象,并将其作为参数。然后,我使用“项目”指针指向该“滑板”对象并将其添加到 vector 中。当用户想要编辑“Skates”对象时,我必须将其dynamic_cast回到“Skates”对象,然后对其进行编辑。

std::vector<Item*> ItemCollection;
Item * item = new Skates("model1", 1);
ItemCollection.push_back(item);
//To retrieve it
Skates * skatesToEdit = dynamic_cast<Skates*>(ItemCollection[0]);

我现在面临的问题是要考虑一个新的派生类,例如“滑板”类。我不想创建一个新方法来处理“滑板”类的编辑,例如:
Skateboard * skateboardToEdit = dynamic_cast<Skateboard*>(ItemCollection[0]);

因为这意味着每次我创建一个新的派生类时,我都需要每次编写这种相同样式的代码。因此,我想知道是否有一种方法可以使应用程序动态地知道它是什么派生类,而无需我指定它。因此,它需要能够确定数据类型,然后提示用户以一种动态方法来编辑它具有的任何属性(因为目标是用户首先要编辑对象),我认为这是不可能的。

最佳答案

我建议也许继承不是您所需要的。与其拥有诸如Skates,Skateboard之类的类,不如考虑仅拥有Item类,它是代表属性的键值的集合。这样,您就不必真正关心项目的类别,并且可以动态列出和编辑属性。

关于c++ - 如何使控制台 list 系统动态化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31406682/

10-11 18:07