Introduction to OOP: Chapter 11: Replacement and Refinement
Replacement in C++ - issues
Replacement in C++ is complicated
If method is declared as virtual then method is polymorphic -
binding based on dynamic class.
If method is not declared as virtual them method is not polymorphic -
and binding is based on static class of value.
Constructors use refinement, all other methods use replacement.
I discuss this issue more in my book
C++ for Java Programmers.