home *** CD-ROM | disk | FTP | other *** search
/ Using Visual C++ 4 (Special Edition) / Using_Visual_C_4_Special_Edition_QUE_1996.iso / ch14 / train.cpp < prev    next >
C/C++ Source or Header  |  1995-10-30  |  2KB  |  104 lines

  1. #include <iostream.h>
  2. #include <afx.h>
  3.  
  4. // Things to put in a RailroadCar
  5. class Cow {
  6. public:
  7.     // Public member functions
  8.     CString isA() { return "Cow"; }
  9.     CString Moo() { return "Moo!"; }
  10. };
  11.  
  12. class Passenger {
  13. public:
  14.     // Constructors and destructor
  15.     Passenger(CString NewName) { Name = NewName; }
  16.  
  17.     // Public member functions
  18.     CString isA() { return "Passenger"; }
  19.     CString GetName() { return Name; }
  20.     CString Complain() { return "Oh my poor back!"; }
  21.  
  22. private:
  23.     CString Name;
  24. };
  25.  
  26.  
  27. // The RailroadCar class template
  28. template <class T>
  29. class RailroadCar {
  30. public:
  31.     // Constructors and destructor
  32.     RailroadCar(int NewCarNumber, T& NewContents);
  33.     ~RailroadCar();
  34.  
  35.     // Public member functions
  36.     void ShowContents();
  37.     T* Unload();
  38.  
  39. private:
  40.     T* pContents;
  41.     int CarNumber;
  42. };
  43.  
  44. // Constructor
  45. template <class T>
  46. RailroadCar<T>::RailroadCar(int NewCarNumber,
  47.                             T&  NewContents)
  48. {
  49.     CarNumber = NewCarNumber;
  50.     pContents = &NewContents;
  51. }
  52.  
  53. // Destructor
  54. template <class T>
  55. RailroadCar<T>::~RailroadCar()
  56. {
  57.     Unload();
  58. }
  59.  
  60. // Public member functions
  61. template <class T>
  62. void RailroadCar<T>::ShowContents()
  63. {
  64.     cout << "Railroad car #" << CarNumber;
  65.     cout << " is filled with " << pContents->isA();
  66.     cout << "s\n";
  67. }
  68.  
  69. template <class T>
  70. T* RailroadCar<T>::Unload()
  71. {
  72.     T* temp = pContents;
  73.     pContents = NULL;
  74.     return temp;
  75. }
  76.  
  77.  
  78. void main()
  79. {
  80.     // At Station 1
  81.     Cow ACow;
  82.     Passenger APassenger("Monty");
  83.  
  84.     RailroadCar<Cow> CarNumber1(1, ACow);
  85.     RailroadCar<Passenger> CarNumber2(2, APassenger);
  86.  
  87.     CarNumber1.ShowContents();
  88.     CarNumber2.ShowContents();
  89.  
  90.     // Go to Station 2...
  91.     cout << "\n..Choo..Choo..\n\n";
  92.  
  93.     // At Station 2
  94.     Cow* AtStation2Cow = CarNumber1.Unload();
  95.     Passenger* AtStation2Passenger =
  96.                     CarNumber2.Unload();
  97.  
  98.     cout << "How was the trip, ";
  99.     cout << AtStation2Passenger->GetName() << "?";
  100.     cout << "  " << AtStation2Passenger->Complain();
  101.     cout << "\n";
  102.     cout << AtStation2Cow->Moo() << "\n";
  103. }
  104.