Home Segments Index Top Previous Next

574: Mainline

Using the specialized pattern, you can overload the output operator so that output statements can handle railroad-car operands, surrounding each car's short name with brackets:

ostream& operator<< (ostream& output_stream, railroad_car& r) { 
  output_stream << "[" << r.short_name ( ) << "]"; 
  return output_stream;} 

Note that the parameter, r, declared to be a railroad_car must be a call-by-reference parameter, because you want the overloaded output operator to handle objects that belong to subclasses of the railroad_car class, such as box_car objects. As you learned in Chapter 37, if r were a call-by-value parameter, and the argument were, say, a box_car object, then only that part of the object inherited from the railroad_car class would be copied, and there would be no way for the overloaded output operator to know that [box], rather than [rrc], is supposed to be displayed.