#include <iostream>
using std::cout;
using std::endl;
#define SIZE_INT 5
#define SIZE_DOUBLE 4
#define DEFAULT_SIZE 6
template <class T, int size = DEFAULT_SIZE> class Test {
T arr[size];
public:
Test() {
cout << "constructor" << endl;
}
T &operator[](int i);
void print(void);
};
template <class T, int size> T &Test<T, size>::operator[](int i)
{
if (i < 0 || i > size - 1) {
cout << "index: " << i << " is out of range" << endl;
return arr[size - 1];
}
return arr[i];
}
template <class T, int size>
void Test<T, size>::print(void)
{
for (int i = 0; i < size; i++)
cout << arr[i] << ' ';
cout << endl;
}
int main()
{
Test<int, SIZE_INT> iobj1;
for (int i = 0; i < SIZE_INT; i++)
iobj1[i] = i + 3;
iobj1.print();
iobj1[17] = 99;
Test<double, SIZE_DOUBLE> dobj;
for (int i = 0; i < SIZE_DOUBLE; i++)
dobj[i] = (double)(i + 7) / 4;
dobj.print();
return 0;
}
/*
run:
constructor
3 4 5 6 7
index: 17 is out of range
constructor
1.75 2 2.25 2.5
*/