添字演算子
関数呼び出し演算子など、添字演算子 ([ ]) は、二項演算子と見なされます。 添字演算子は 1 つの引数を受け取る非静的メンバー関数である必要があります。 この引数は任意の型にでき、目的の配列の添字を指定します。
使用例
範囲チェックを実行する型 int のベクターを作成する方法を次の例に示します。
// subscripting.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
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.
int main() {
IntVector v( 10 );
int i;
for( i = 0; i <= 10; ++i )
v[i] = i;
v[3] = v[9];
for ( i = 0; i <= 10; ++i )
cout << "Element: [" << i << "] = " << v[i] << endl;
}
コメント
前のプログラムで i が 10 に達すると、operator[] は境界外の添字が使用されていることを検出して、エラー メッセージを発行します。
関数 operator[] は参照型を返すことに注意してください。 これにより、これが左辺値になり、代入演算子の両側で添字式を使用できるようになります。