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);
};

最佳答案

有很多可能性,这是一个简单的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)。如果您想要同一个对象,那么 vector 的更改也会影响对象“外部”(反之亦然),则需要一个附加的指针。
还要注意,复制Surface的子类对象将得到纯的Surface,而没有子类部分(对象 slice )。如果需要该部分,则也需要一个指针(如果还没有指针的话)。
//pointer variant
vector<Surface*> surfaces;
...
addSurface(Surface &s)
{
    surfaces.push_back(&s);
}

09-29 21:00