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

时间:2012-07-01 20:22:40

标签: 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;
};

2 个答案:

答案 0 :(得分:6)

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

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

并插入已分配的派生类:

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

答案 1 :(得分:0)

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