(Latest Revision: Wed Apr 2 23:34:56 PST 2003 )
template <class T>
class aClass
{
public:
aClass();
aClass(T InitialData);
void SetData(T NewData);
T Data();
private:
T TheData;
}; // end class
#include "class.cpp"
/* Since class.h includes class.cpp, the include statement
below has the effect of including both class.h and
class.cpp. We are supposed to compile the program with a
command such as:
g++ main.cpp
and not
g++ main.cpp class.cpp
Thus we do not allow separate compilation of
main.cpp and class.cpp, but force all the source code to
be compiled as one large file. Most compilers need this
"help." */
#include "class.h"
#include <iostream.h>
int main()
{
aClass<int> A; // TheData is an int aClass<double> B(4.8); //TheData is a double == 4.8 A.SetData(5); cout << B.Data() << endl; }
template <class T>
aClass<T>::aClass() : TheData(0)
/* Note that the compiler would not know what kind of
code to generate to assign "0" to TheData if class.cpp were compiled
independently from main.cpp. It would have to generate code that
'figures out' how to do the assignment at runtime. Because of this kind of
problem, it makes the compiler's job easier when we include class.cpp in
main.cpp. The compiler then knows it will be assigning an integer or real
to TheData. */
{
} // end default constructor
template <class T>
aClass<T>::aClass(T InitialData): TheData(InitialData)
{
} // end constructor
template <class T>
void aClass<T>::SetData(T NewData)
{
TheData = NewData;
} // end SetData
template <class T>
T aClass<T>::Data()
{
return TheData;
} // end Data