Subscripting

The subscript operator ([ ]), like the function-call operator, is considered a binary operator. The subscript operator must be a nonstatic member function that takes a single argument. This argument can be of any type and designates the desired array subscript.

The following example demonstrates how to create a vector of type int that implements bounds checking:

#include <iostream.h>

class IntVector

{

public:

IntVector( int cElements );

~IntVector() { delete _iElements; }

int& operator[]( int nSubscript );

private:

int *_iElements;

int _iUpperBound;

};

// Construct an IntVector.

IntVector::IntVector( int cElements )

{

_iElements = new int[cElements];

_iUpperBound = cElements;

}

// Subscript operator for IntVector.

int& IntVector::operator[]( int nSubscript )

{

static int iErr = -1;

if( nSubscript >= 0 && nSubscript < _iUpperBound )

return _iElements[nSubscript];

else

{

clog << “Array bounds violation.” << endl;

return iErr;

}

}

// Test the IntVector class.

main()

{

IntVector v( 10 );

for( int i = 0; i <= 10; ++i )

v[i] = i;

v[3] = v[9];

for( i = 0; i <= 10; ++i )

cout << “Element: [” << i << “] = ” << v[i]

<< endl;

return v[0];

}

When i reaches 10 in the preceding program, operator[] detects that an out-of-bounds subscript is being used and issues an error message.

Note that the function operator[] returns a reference type. This causes it to be an l-value, allowing you to use subscripted expressions on either side of assignment operators.