存储类中的对象列表

时间:2015-09-15 01:27:36

标签: c++ list class object

全新的c ++,试图弄清楚如何创建一个可以存储对象列表的类。

我有一个带有子类的表面类,例如三角形,圆形等。 我正在尝试创建一个名为Scene的类,我可以存储所有曲面的列表。

这是我正在尝试做的头文件。你是如何用c ++做的?

class Scene

{
private:
    //background color elements 
    float bgRed;
    float bgGreen;
    float bgBlue;
    //array of different surfaces
    Surface surfaces[];  //<--- What I want


public:
    Scene();
    addSurface(Surface s);
};

1 个答案:

答案 0 :(得分:3)

有很多种可能性,这里有一个简单的std::vector

vector<Surface> surfaces;
...
addSurface(const Surface &s) //const and & are not strictly necessary, but better
{
    surfaces.push_back(s);
}  
...
//accessing like an array: surfaces[index]
//element count: surfaces.size()

这会在插入时复制传递的对象(s)。如果你想要相同的对象,那么向量中的变化也会影响对象“外部”(反之亦然),你需要一个额外的指针。
另请注意,复制Surface的子类对象将导致纯Surface,而不包含子类部分(对象切片)。如果你需要那个部分,你也需要一个指针(如果你还没有指针)。

//pointer variant
vector<Surface*> surfaces;
...
addSurface(Surface &s)
{
    surfaces.push_back(&s);
}