In reply to bachan21:
When we declare a function as virtual , the function will be registered to a loop up table at the time object is created using default constructor .When we reference that virtual function it will be found implicitly from the look up table.
When we declare default constructor as virtual , the loop up table doesn’t exist yet for it ie even before object is constructed we are looking up the table. So the constructor function won’t be added to the LUT and hence it cant be declared as virtual.