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 >
Wrap
C/C++ Source or Header
|
1995-10-30
|
2KB
|
104 lines
#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";
}