One virtual function can shadow another, just as an ordinary member
function can shadow another. Thus, the display_short_name
virtual
functions in the engine
, box_car
, tank_car
, and
caboose
classes shadow the display_short_name
virtual member
function in the railroad_car
class.
Assuming that you never intend to create any individual class objects
at the railroad_car
level, the only reason to define the
display_short_name
function in the railroad_car
class definition is to inform C++ that lower-level
display_short_name
virtual functions are defined.
On the other hand, if you fail to define a
display_short_name
function, either deliberately or
accidentally, in, say, the engine
class definition, then
there will be nothing to shadow the display_short_name
function defined in the railroad_car
class definition
when you attempt to display the short name of an engine.
Accordingly, your program will display rrc
.