这个问题已经在这里有一个答案:
- 如何重载数组索引运算符包装类二维数组的? 2个回答
我有一个行为应该像矩阵类的模板。 因此,用例是这样的:
Matrix matrix(10,10);
matrix[0][0]=4;
//set the values for the rest of the matrix
cout<<matrix[1][2]<<endl;
当我直接在构造函数中设置的值,它工作得很好,但是当我想使用matrix[x][y]=z;
我得到error: lvalue required as left operand of assignment
。 我想,我必须重载=
操作符。 不过我想整个晚上,我没搞清楚,如何实现它。 会有人来请这么客气,并告诉我如何重载=
运算符我的代码,使之赋值给矩阵?
码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <sstream>
using namespace std;
class Matrix {
public:
Matrix(int x,int y) {
_arrayofarrays = new int*[x];
for (int i = 0; i < x; ++i)
_arrayofarrays[i] = new int[y];
// works here
_arrayofarrays[3][4] = 5;
}
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;
};
int main() {
Matrix matrix(5,5);
// doesn't work :-S
// matrix[2][1]=0;
cout << matrix[3][4] << endl;
}