A constructor performs various tasks that are not visible to you as the programmer, even if you write no code for the constructor. These tasks are all associated with building a complete and correct instance of class type.
In Microsoft C++ (and some other implementations of C++), a constructor:
Initializes the object's virtual base pointer(s) (vbptr). This step is performed if the class has virtual base classes in the inheritance graph.
Calls base class and member constructors in the order of declaration.
Initializes the object's virtual function pointers (vfptr). This step is performed if the class has or inherits virtual functions. Virtual function pointers point to the class's virtual function table(s) (v-table) and allow correct binding of virtual function calls to code.
Executes optional code in the body of the constructor function.
When the constructor is finished, the allocated memory is an object of a given class type. Because of the steps the constructor performs, “late binding” in the form of virtual functions can be resolved at the point of a virtual function call. The constructor has also constructed base classes and has constructed composed objects (objects included as data members). Late binding is the mechanism by which C++ implements polymorphic behavior for objects. (For a discussion of polymorphism, see Chapter 7 of the C++ Tutorial manual.)