全新的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);
};
答案 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);
}