The beauty of OO is that you can easily construct a class that separates this implementation detail (0 base) from your model (a chess board with row numbers starting at 1).

So you could do something like this...

template <class T>

class OneBasedArray {

int m_size;

T *m_array;

public:

OneBasedArray(int size) {

m_size = size;

m_array = new T[size]; }

~OneBasedArray(int size) {

delete [] m_array }

T& operator[](int i) {

ASSERT(i > 0 && i <= m_size);

return m_array[i-1]; }

}

Now I can say

OneBasedArray<myClass> arr(3);

arr[1] = something...

(Sorry, no compiler here, so this is just the gist of it. But you get the idea.)

Cheers,

- Frank