How to make an array with polymorphism in C++?

arrays, c++, inheritance, polymorphism, virtual

Solution

In C++, polymorphism and arrays don't mix.

Since in general the size of the derived class is different to the size of the base class, polymorphism and pointer arithmetic don't play together nicely. Since array access involves pointer arithmetic, expressions such as `pBase[1]` don't work as expected.

One possibility is to have an array of pointers to your objects, perhaps even smart pointers to simplify memory management. But don't forget to define a virtual destructor in `Base1`.

Problem

``` class Base1 { private: int testInput; public: Base1(); virtual int GetRow(void) = 0; }; Base1::Base1() { testInput = 0; } class table : public Base1 { private: int row; public: table(); virtual int GetRow(void); }; table::table() { //Contructor row = 5; } int table::GetRow() { return row; } int main () { Base1* pBase = new table[3]; pBase[0].GetRow(); pBase[1].GetRow(); //when i get to this line, the compiler keep saying access // violation. pBase[2].GetRow(); return 0; } ``` I'm trying to create an array of 3 table class. The requirement is I have to use Base object to do that. ``` Base1 * pBase = new table[3]; ``` look fine to me. But when I tried to access each table, the compiler said it's access violation. I don't know what wrong with this code. I'm using Visual Studio 2010 though.

Original source

Related problems