使用异构数组存储不同的子类

  • 本文关键字:子类 存储 异构 数组 c++
  • 更新时间 :
  • 英文 :


我有一个文件,其中包含名称,颜色和有关它们的一些统计信息的列表。例如:

John black 10 15 
Adam black 19 18 
Jake brown 13 51 56 62 
Rich brown 13 09 98 84

我希望能够根据颜色将这些名称、颜色和数字存储在各自的对象中。所以约翰和亚当,将被存储在布莱克类中,杰克和里奇将被存放在布朗班。

由于每个人是不同的类型,我如何将每个人存储在各自的对象中?

class Color{
  public:
    Color(string FIRST, string COLOR);
  protected:
    string FirstName;
    string ColorType;
};
class Black : public Color{
  public:
    Black(string FIRST, string COLOR, int A, int B); 
  private:
    string FirstName;
    string ColorType;
    int number1, number2;
};
class Brown : public Color{
  public:
    Brown(string FIRST, string COLOR, int A, int B, int C, int D); 
  private:
    string FirstName;
    string ColorType;
    int number1, number2, number3, number4;
};

创建一个基类指针的容器:

std::vector<std::unique_ptr<Color>> colors;

并插入分配的派生类:

colors.emplace_back(new Black("John", "Black", 10, 15));
通常,

您将有一个指向基类型的指针列表,并创建派生类型的实例。 请参考 Dave 的答案,了解如何使用 C++11。 对于旧版本的 C++,通常会使 Color 析构函数成为虚拟,并创建一个包装器来管理内存,或者可能使用 boost。

最新更新