对于 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,没有子类部分(对象切片)。如果您需要该部分,您还需要一个指针(如果您还没有)。
//pointer variant
vector<Surface*> surfaces;
...
addSurface(Surface &s)
{
surfaces.push_back(&s);
}
关于c++ - 存储类中的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32576242/