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