You cannot index like that. You have allocated an array of Rectangles
and stored a pointer to the first in shapes
. When you do shapes[1]
you’re dereferencing (shapes + 1)
. This will not give you a pointer to the next Rectangle
, but a pointer to what would be the next Shape
in a presumed array of Shape
. Of course, this is undefined behaviour. In your case, you’re being lucky and getting a crash.
Using a pointer to Rectangle
makes the indexing work correctly.
int main()
{
Rectangle * shapes = new Rectangle[10];
for (int i = 0; i < 10; ++i) shapes[i].draw();
}
If you want to have different kinds of Shape
s in the array and use them polymorphically you need an array of pointers to Shape.