Thomas Kowalski wrote:
class Base {
virtual Base (int,int) = 0;
};
Constructor of any calss is _always_ like virtual. The keyword virtual
means "use class of real object". When you are creating object, you
must explicit write name of concrete class of object to create.
If you need to create object of unknown derived class, you must to
define ordinary member inside any class, to create concrete class at
runtime.
class Base{};
class Derived1: public Base{};
class Derived2: public Base{};
class Factory
{
public:
Base* create();
};
Member Factory::create() will encapsulate knowledge how to create
concrete derived class from Base, for example:
Base* Factory::create(){ return new Derived2; }
Class Factory can remove implementation of Factory::create() to derived
from Factory, in the case Factory::create() must be virtual
class Factory
{
public:
virtual Base* create()=0;
};