下标
编写在下方的运算符 ([]),类似于函数调用运算符,则将其视为二元运算符。 编写在下方的运算符必须是采用单个参数的非静态成员函数。 此参数可以是任何类型并指定所需的数组下标。
示例
下面的示例演示如何创建实现区域类型检查 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[] 返回引用类型。 这会使它是左值,允许您使用 subscripted 表达式赋值运算符两侧的。