Polymorphism & Pointers to arrays
arrays, c++, pointers, polymorphism
Solution
You can't treat arrays polymorphically, so while `new B[100]` creates an array of `B` objects and returns a pointer to the array - or equivalently the first element of the array - and while it is valid to assign this pointer to a pointer to a base class, it is not valid to treat this as a pointer into an array of `A` objects.
The principal reason that you can't is that (typically) derived objects are a different size to their base classes, so attempting to access the array as an array of base class objects will not use the correct offset to get a pointer to the next base class subobject of the next member of the derived class array.
Problem
I have a class A: ``` class A { public: virtual double getValue() = 0; } ``` And a class B: ``` class B : public A { public: virtual double getValue() { return 0.0; } } ``` And then in main() I do: ``` A * var; var = new B[100]; std::cout << var[0].getValue(); //This works fine std::cout << var[1].getValue(); //This, or any other index besides 0, causes the program to quit ``` If instead I do: ``` B * var; var = new B[100]; std::cout << var[0].getValue(); //This works fine std::cout << var[1].getValue(); //Everything else works fine too ``` Everything compiles fine, but it seems as though there is something wrong with my polymorphism perhaps? I'm puzzled.