A constructor may not be declared virtual. The easiest way to simulate virtual construction is by defining a virtual member function that returns a constructed object of its class type:
class Browser{public: virtual Browser* construct() { return new Browser; } //virtual default constructor virtual Browser* clone() { return new Browser(*this); } //virtual copy constructor};class HTMLEditor: public Browser{public: HTMLEditor * construct() { return new HTMLEditor; }//virtual default constructor HTMLEditor * clone() { return new HTMLEditor (*this); } //virtual copy constructor};
The polymorphic behavior of the member functions clone() and construct() enables you to instantiate a new object of the right type, without having to know the exact type of the source object.
void create (Browser& br){ Browser* pbr = br.construct(); //