#include #include using namespace std; template class Array { private: T* ptrT; int size; public: Array(): ptrT(0), size(0) {} Array(int); T& operator[](int); }; template Array::Array(int n) : ptrT(new T[n]), size(n) { for (int i = 0; i < size; i++) ptrT[i] = 0; } template T& Array::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(int z = 0) : 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 a1(3); for (i = 0; i < 3; i++) a1[i] = (2 * i); for (i = 0; i < 3; i++) cout << a1[i] << endl; Array a2(3); for (i = 0; i < 3; i++) a2[i] = (2.7 * i); for (i = 0; i < 3; i++) cout << a2[i] << endl; Array a3(6); for (i = 0; i < 3; i++) a3[i] = 65+3*i; for (i = 0; i < 3; i++) cout << a3[i] << endl; Array 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; }