下标运算符重载¶
下标运算符operator[]
和函数调用运算符类似,也是二元运算符。除了二元运算符的规范外,下标运算符必须是非静态成员函数
示例¶
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 {
cout << "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;
}
结果
Array bounds violation.
Array bounds violation.
Element: [0] = 0
Element: [1] = 1
Element: [2] = 2
Element: [3] = 9
Element: [4] = 4
Element: [5] = 5
Element: [6] = 6
Element: [7] = 7
Element: [8] = 8
Element: [9] = 9
Array bounds violation.
Element: [10] = 10
- 重载下标运算符函数返回的是左值引用,所以可用于等号左右侧
- 当下标值为
10
时,超出了数组界限,返回静态int
值引用并赋值为10
,所以之后调用过程中超出数组界限的返回值为10