#include <iostream.h> 
#include <stdlib.h> 
class railroad_car {
  public: railroad_car ( ) { }
          virtual void display_short_name ( ) { }
};
class box_car : public railroad_car {
  public: box_car ( ) { }
          virtual void display_short_name ( ) {cout << "box";}
};
class tank_car : public railroad_car {
  public: tank_car ( ) { }
          virtual void display_short_name ( ) {cout << "tnk";}
};
class engine : public railroad_car {
  public: engine ( ) { }
          virtual void display_short_name ( ) {cout << "eng";}
};
class caboose : public railroad_car {
  public: caboose ( ) { }
          virtual void display_short_name ( ) {cout << "cab";}
};
// Define railroad car pointer array:
railroad_car *train[100];
// Declare enumeration constants, needed in switch statement:
enum {eng_code, box_code, tnk_code, cab_code};
main ( ) {
  // Declare various integer variables:
  int n, car_count, type_code;
  // Read car-type number and create car class objects:
  for (car_count = 0; cin >> type_code; ++car_count)
    switch (type_code) {
      case eng_code: train[car_count] = new engine;   break;
      case box_code: train[car_count] = new box_car;  break;
      case tnk_code: train[car_count] = new tank_car; break;
      case cab_code: train[car_count] = new caboose;   break;
      default: cerr << "Car code " << type_code
                    << " is unknown!" << endl; 
               exit (0);
    }
  // Display classes using display_short_name virtual function:
  for (n = 0; n < car_count; ++n) {
    train[n] -> display_short_name ( );
    cout << endl;
  }
}
