Objects that stand for other objects are called proxy objects or surrogates.
T& operator (int index);
const T& operator (int index)const;
Array1D operator (int index);
const Array1D operator (int index) const;
The following then becomes legal:
Here data yields an Array1D object
and the operator  invocation on that object yields the float in
position(3,6) of the original two dimensional array. Clients of the
Array2D class need not be aware of the presence of the Array1D class.
Objects of this latter class stand for one-dimensional array objects
that, conceptually, do not exist for clients of Array2D. Such clients
program as if they were using real, live, two-dimensional arrays. Each
Array1D object stands for a one-dimensional array that is absent from a
conceptual model used by the clients of Array2D. In the above example,
Array1D is a proxy class. Its instances stand for one-dimensional
arrays that, conceptually, do not exist.