运算符[] []过载
是否可以重载[]
运算符两次? 要允许,像这样: function[3][3]
(就像在一个二维数组中)。
如果可能的话,我希望看到一些示例代码。
你可以重载operator[]
来返回一个可以再次使用operator[]
的对象来获得结果。
class ArrayOfArrays {
public:
ArrayOfArrays() {
_arrayofarrays = new int*[10];
for(int i = 0; i < 10; ++i)
_arrayofarrays[i] = new int[10];
}
class Proxy {
public:
Proxy(int* _array) : _array(_array) { }
int operator[](int index) {
return _array[index];
}
private:
int* _array;
};
Proxy operator[](int index) {
return Proxy(_arrayofarrays[index]);
}
private:
int** _arrayofarrays;
};
然后你可以像这样使用它:
ArrayOfArrays aoa;
aoa[3][5];
这只是一个简单的例子,你想添加一堆边界检查和东西,但你明白了。
表达式x[y][z]
要求x[y]
求值为支持d[z]
的对象d
。
这意味着x[y]
应该是一个带有operator[]
的对象,该operator[]
计算结果为也支持operator[]
的“代理对象”。
这是链接它们的唯一方法。
或者,重载operator()
以获取多个参数,以便可以调用myObject(x,y)
。
如果您在first []调用中返回某种代理类,则可能会发生这种情况。 然而,还有其他的选择:你可以重载operator(),它可以接受任意数量的参数( function(3,3)
)。