Class Templates - Example 10-10 - Template function with a user defined type
// File: ex10-10.cpp
#include <iostream>
#include <cstdlib>
using namespace std;
template <typename T>
class array
{
private:
T* ptrT;
int size;
public:
array(): ptrT(0), size(0) {}
array(int);
T& operator[](int);
};
template <typename T>
array<T>::array(int n)
{
size = n;
ptrT = new T[n];
for (int i = 0; i < size; i++) ptrT[i] = 0;
}
template <typename T>
T& array<T>::operator[](int index)
{
if (index < 0 || index >= size)
{
cerr << "invalid array index\n";
return *ptrT;
}
else return ptrT[index];
}
class fraction
{
private:
int numer, denom;
public:
fraction() {}
fraction(int z) : numer(z), denom(0) {}
fraction(int n, int d) : numer(n), denom(d) {}
friend ostream& operator<<(ostream&, const fraction&);
};
ostream& operator<<(ostream& s, const fraction& f)
{
return s << f.numer << '/' << f.denom;
}
int main(void)
{
int i;
array<int> a1(3);
for (i = 0; i < 3; i++) a1[i] = (2 * i);
for (i = 0; i < 3; i++) cout << a1[i] << endl;
array<float> a2(3);
for (i = 0; i < 3; i++) a2[i] = (2.7 * i);
for (i = 0; i < 3; i++) cout << a2[i] << endl;
array<char> a3(6);
for (i = 0; i < 3; i++) a3[i] = 65+3*i;
for (i = 0; i < 3; i++) cout << a3[i] << endl;
array<fraction> a4(3);
a4[0] = fraction(3,4);
a4[1] = fraction(1,2);
a4[2] = fraction(5,8);
for (i = 0; i < 3; i++) cout << a4[i] << endl;
return 0;
}
/***** Output *****
0
2
4
0
2.7
5.4
A
D
G
3/4
1/2
5/8
*********************/