c++ - 存储类中的对象列表

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

最佳答案

有很多可能性,这是一个带有 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/

相关文章:

c++ 枚举范围无法使用 -std=c++98 编译,但可以使用 -std=c++11

c++ - 在浅拷贝上调用 delete 不会爆炸

c++ - 使用boost的多线程一位读者和一位作者

c++ - 是否可以使用 WIN32 API 和 GDI+ (C++) 对工具提示进行样式化

c++ - 在 Mac OSX 中替代 --no-undefined

javascript - 从类中设置的点击处理程序中使用 setTimeout 调用 javascript 类函数

r - 如何在两个名称列表中找到匹配项

Python - 如何从字符串列表中删除字母,将字符串更改为 float ,转换一些 float 并保持顺序

arrays - 确定2个对应集合的类型

C++ 类和对象引用