Mega Code Archive

 
Categories / C++ / Overload
 

Overload [] to create a generic safe array type

#include <iostream> #include <cstdlib> using namespace std; template <class T, int len> class safe_array {   T ar[len];   int length; public:   safe_array();   T &operator[](int i);   int getlen() { return length; } }; template <class T, int len> safe_array<T, len>::safe_array() {   for(int i=0; i < len; ++i) ar[i] = T();   length = len; } template <class T, int len> T &safe_array<T, len>::operator[](int i) {   if(i < 0 || i > len-1) {     cout << "\nIndex value of " << i << " is out-of-bounds.\n";     exit(1);   }   return ar[i]; } class myclass { public:   int x;   myclass(int i) { x = i; };   myclass() { x = -1; } }; int main() {   safe_array<int, 10> intArray;   safe_array<double, 5> doubleArray;   int i;   for(i=0; i < intArray.getlen(); ++i)       cout << intArray[i] << endl;   for(i=0; i < intArray.getlen(); ++i)       intArray[i] = i;   for(i=0; i < intArray.getlen(); ++i)       cout << intArray[i] << endl;   for(i=0; i < doubleArray.getlen(); ++i)       cout << doubleArray[i] << endl;   for(i=0; i < doubleArray.getlen(); ++i)       doubleArray[i] = (double) i/3;   for(i=0; i < doubleArray.getlen(); ++i)       cout << doubleArray[i] << endl;   safe_array<myclass, 3> classArray; // myclass array of size 3   cout << "Initial values in classArray: ";   for(i = 0; i < classArray.getlen(); ++i) cout << classArray[i].x << " ";   cout << endl;   classArray[0].x = 9;   classArray[1].x = 9;   classArray[2].x = -9;   cout << "New values for classArray: ";   for(i = 0; i < classArray.getlen(); ++i) cout << classArray[i].x << " ";   cout << endl;   intArray[12] = 100;   return 0; }