If I have a base class, with only virtual methods and 2 derived classes from
the base class, with those virtual methods implemented.
How do I:
// causes C2259
BaseClass* base = new BaseClass[2];
BaseClass[0] = new FirstDerivedClass;
BaseClass[1] = new SecondDerivedClass;
or:
// causes "base is being used without being initialized"
BaseClass* base;
// causes CC59 again
BaseClass* base = new BaseClass;
base[0] = FirstDerivedClass();
base[1] = SecondDerivedClass();
(or something similar)
…so that I can access the BaseClasss methods through the DerivedClass,
but by pointer and the pointer is an array of DerivedClasss?
Your array is of the wrong type: it stores
BaseClassobject instances instead of pointers to them. SinceBaseClassseems to be abstract, the compiler complains that it cannot default-construct instances to fill your array.Even if
BaseClasswere not abstract, using arrays polymorphically is a big no-no in C++ so you should do things differently in any case.Fix this by changing the code to:
That said, most of the time it is preferable to use
std::vectorinstead of plain arrays and smart pointers (such asstd::shared_ptr) instead of dumb pointers. Using these tools instead of manually writing code will take care of a host of issues transparently at an extremely small runtime cost.