This only happens for virtual functions. The calling object's type will be determined at run-time for virtual functions. The keyword virtual next to the function prototype of a member function makes sure that the type of its calling object will be determined dynamically at run-time. Make any functions that have the same name in base and derived classes into virtual functions. The process function above takes a person object as an argument.
Abstract classes have at least one pure virtual function.
We don't know how to draw a generic shape. But when we have derived classes such as Rectangle, Square, Circle, we will know how to draw those.