【问题标题】:How can I check which derivate is it of one class and how can I work with their structure in a list我如何检查它属于一个类的哪个衍生物,以及如何在列表中使用它们的结构
【发布时间】:2015-06-21 16:38:05
【问题描述】:

我有以下问题,我希望伟大的社区可以帮助我。 如果我有一个班级:

class one
{
private:
  int data;

public:
  one();
  void safe();
  void load();
};

然后是第一类的2个派生类:

class two: public one
{
private:
  int data2;
public:
  two();
  safe();
  load();
};

class three: public one
{
private:
  int    data3;
  string data4;
public:
  three();
  void safe();
  void load();
};

现在我必须在这些类中存储数据。类的对象存储在列表中。在这个例子中,这些列表的一个元素可以是第二类或第三类的一个对象。现在,如果我必须将列表的内容保存在文件中,我需要获取data2 的数据,或者如果我有其他对象,我需要data3data4

如何检查它是哪个派生对象以及如何获取对象的数据?我的意思是这一定是可能的,因为它们都是一个的派生词。

【问题讨论】:

  • 我建议你了解virtual方法。
  • 你是对的。但是如果你的教授试图教你一门语言并解释你很多错误的东西,这并不容易:/但我想我在这里找到了一个很好的解释:stackoverflow.com/questions/2391679/…
  • 很高兴我能指出正确的方向。

标签: c++ class derivative


【解决方案1】:

如果您需要列表:

std::list<one*> myList;

如果你需要一个像数组这样的集合

std::vector<one*> myVec;

您可以在此处查看有关如何插入和处理列表 std::list 中的数据的更多详细信息:http://www.cplusplus.com/reference/list/list/

std::vector&lt;&gt; 在这里:http://www.cplusplus.com/reference/vector/vector/

第二个问题:

我如何检查它是哪个派生词以及如何获取 对象?

由于您已经创建了继承并将对象作为指针保存在容器中,如std::liststd::vector,系统可以使用多态性识别对象的动态类型,并根据对象的类型调用函数。更多详情请点击此处:http://www.cplusplus.com/doc/tutorial/polymorphism/

【讨论】:

  • 我必须编写自己的列表,并且该列表也可以正常工作。我的列表是一个模板,可以是任何数据存储对象。我遇到的问题是我不知道如何知道是否存储了来自第二类或第三类的对象的数据。所以我不能只说 getData() 然后我就得到了正确的答案。
  • @missjohanna 您是在一个列表中保留一、二和三,还是在单独的列表中保留单独的类对象?您的列表的模板类型参数是什么?
  • 我将两个和三个放在一个列表中。我列表的模板类型参数是第一类,所以我可以使用第二类和第三类进行数据存储。但是我将我的 List 作为我的 Element 类的派生来处理,它也是一个模板。例如我用 list * list1 = new list;希望这有助于表明我的观点
  • @missjohanna 您正面临对象切片,为了在您的情况下将对象正确保存在容器中,您应该使用 list
  • 你说得对,我最好在列表中使用类一的指针。或者你会说我不能使用我自己的列表类?为什么我不应该使用 list * ?不也可以吗?
猜你喜欢
  • 2014-10-07
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 2014-12-26
  • 2022-05-24
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
相关资源
最近更新 更多