Suppose that you decide to define an ordinary
functionnot a member functionthat takes an ordinary railroad-car
argument and computes that car's volume. You might try to define
ordinary_capacity_function
as an ordinary function by having it give
all the work to the already-defined capacity
virtual member
function:
// DEFECTIVE attempt to define ordinary_capacity_function! double ordinary_capacity_function (railroad_car r) { return r.capacity ( ); }
You might think that this function would work properly in the
analyze_train
program if called as follows:
for (n = 0; n < car_count; ++n) { // Display short name and capacity and terminate the line: cout << train[n] -> short_name ( ) << " " << ordinary_capacity_function (*train[n]) << endl; --------- } ^ | Dereferenced array pointer identifies --* a chunk of memory that holds a box car, tank car, engine, or caboose
Perhaps unexpectedly, incorporating this version of
ordinary_capacity_function
into the analyze_train
program leads to the following result:
eng 0 box 0 box 0 tnk 0 cab 0