home *** CD-ROM | disk | FTP | other *** search
- #include <iostream.h>
- #include <afx.h>
-
- // Things to put in a RailroadCar
- class Cow {
- public:
- // Public member functions
- CString isA() { return "Cow"; }
- CString Moo() { return "Moo!"; }
- };
-
- class Passenger {
- public:
- // Constructors and destructor
- Passenger(CString NewName) { Name = NewName; }
-
- // Public member functions
- CString isA() { return "Passenger"; }
- CString GetName() { return Name; }
- CString Complain() { return "Oh my poor back!"; }
-
- private:
- CString Name;
- };
-
-
- // The RailroadCar class template
- template <class T>
- class RailroadCar {
- public:
- // Constructors and destructor
- RailroadCar(int NewCarNumber, T& NewContents);
- ~RailroadCar();
-
- // Public member functions
- void ShowContents();
- T* Unload();
-
- private:
- T* pContents;
- int CarNumber;
- };
-
- // Constructor
- template <class T>
- RailroadCar<T>::RailroadCar(int NewCarNumber,
- T& NewContents)
- {
- CarNumber = NewCarNumber;
- pContents = &NewContents;
- }
-
- // Destructor
- template <class T>
- RailroadCar<T>::~RailroadCar()
- {
- Unload();
- }
-
- // Public member functions
- template <class T>
- void RailroadCar<T>::ShowContents()
- {
- cout << "Railroad car #" << CarNumber;
- cout << " is filled with " << pContents->isA();
- cout << "s\n";
- }
-
- template <class T>
- T* RailroadCar<T>::Unload()
- {
- T* temp = pContents;
- pContents = NULL;
- return temp;
- }
-
-
- void main()
- {
- // At Station 1
- Cow ACow;
- Passenger APassenger("Monty");
-
- RailroadCar<Cow> CarNumber1(1, ACow);
- RailroadCar<Passenger> CarNumber2(2, APassenger);
-
- CarNumber1.ShowContents();
- CarNumber2.ShowContents();
-
- // Go to Station 2...
- cout << "\n..Choo..Choo..\n\n";
-
- // At Station 2
- Cow* AtStation2Cow = CarNumber1.Unload();
- Passenger* AtStation2Passenger =
- CarNumber2.Unload();
-
- cout << "How was the trip, ";
- cout << AtStation2Passenger->GetName() << "?";
- cout << " " << AtStation2Passenger->Complain();
- cout << "\n";
- cout << AtStation2Cow->Moo() << "\n";
- }
-