Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.
In C++, a complete object is constructed one base class at a time.
Say we have a base class B and a class D derived from B. When constructing a D object, while executing B’s constructor, the dynamic type of the object under construction is B. In particular, a call to a virtual function B::Fun will hit B’s definition of Fun, regardless of whether D overrides it or not; and that’s a good thing, because calling a D member function when the D object’s members haven’t even been initialized yet would lead to chaos. Only after the construction of B has completed is D’s constructor body executed and its identity as a D established. As a rule of thumb, keep in mind that during B’s construction there is no way to tell whether the B is a standalone object or a base part of some other further-derived object; virtually-acting virtual functions would be such a “way.”