I extended my Class to dinamically allocate memory in case of over-indexing.
Code:
int& MyArray::operator [] ( unsigned int index_in )
{
// range check
if ( index_in > myLastIndex )
{
unsigned int anArraySize;
// when the range is exceeded, elements of myArray are copied to a temporary array
// myArray is deleted, then a new myArray of size index_in is created, and the previously saved
// data are restored
// MAX_ARRAY_SIZE_VALUE can be set to infinite, error handling WILL be introduced if call to new(MAX_ARRAY_SIZE_VALUE) fails
if( index_in == 0
|| index_in >= MAX_ARRAY_SIZE_VALUE )
{
anArraySize = MAX_ARRAY_SIZE_VALUE;
index_in = MAX_ARRAY_SIZE_VALUE - 1;
}
else
{
anArraySize = index_in + 1;
}
// create temp array
int* aTempArray = new ( int[myLastIndex + 1] );
// store myArray data
for( unsigned int i = 0; i <= myLastIndex; i++ )
{
aTempArray[i] = myArray[i];
}
// delete myArray
delete[] myArray;
// create the new myArray (size increased), error handling will be introduced!
myArray = new ( int[anArraySize] );
for( i = 0; i <= myLastIndex; i++ )
{
myArray[i] = aTempArray[i];
}
// initialize the rest
for( i = myLastIndex + 1; i <= index_in; i++ )
{
myArray[i] = 0;
}
myLastIndex = index_in;
myIndex = index_in;
delete[] aTempArray;
}
else
{
myIndex = index_in;
}
return myArray[myIndex];
}