You might think that similar amendments to the engine
,
tank_car
, and caboose
classes would enable you to display car
names using a for
loop such as the following:
for (n = 0; n < car_count; ++n) { train[n] -> display_short_name ( ); cout << endl; }
After all, train[n]
picks a particular pointer out of the array, and
the class-pointer operator, ->
, tells C++ to go through the
pointer to get at display_short_name
, a member function defined in
the definitions of all four car types.
Your C++ compiler rejects the program, nevertheless. The
reason is that the train
array is supposed to contain
pointers to railroad_car
objects, and you have defined no
display_short_name
function for railroad_car
objects. At compile time, the compiler has no clue that the
pointers in the train
array may actually point to objects
that belong to subclasses for which the display_short_name
function is defined.