tdwig
tdwig

Reputation: 41

store list of objects in class

Brand new to c++, trying to figure out how to create a class that I can store a list of objects in.

I have a surface class with subclasses such as triangles, circles, ect. I'm trying to create a class called Scene, that I can store a list of all the surfaces.

Here's the header file for what I'm trying to do. How do you do this in 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);
};

Upvotes: 2

Views: 1628

Answers (1)

deviantfan
deviantfan

Reputation: 11434

There are many possibilities, here's a easy one with a 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()

This copies the passed objects (s) while inserting. If you want the same object, so that changes in the vector affect the object "outside" too (and vice-versa), you'll need an additional pointer.
Also note that copying of an child class object of Surface will result in a pure Surface, without the child class part (object slicing). If you need that part, you'll need a pointer too (if you don't have one already).

//pointer variant
vector<Surface*> surfaces;
...
addSurface(Surface &s)
{
    surfaces.push_back(&s);
}  

Upvotes: 3

Related Questions