我有一个代表矩阵的类代码:
class Matrix {
private:
int** M;
int n, m;
public:
Matrix(int _n, int _m, int v) {
n = _n;
m = _m;
M = new int*[n];
for (int i = 0; i < n; i++)
M[i] = new int[m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++)
M[i][j] = v;
}
}
int operator() (unsigned row, unsigned col) {
return this -> M[row][col];
}
void set(int i, int j, int v) {
M[i][j] = v;
}
};
当我在main
函数或其他类中使用此类时,我可以不更改单元格的内容。由于operator()
,我只能访问/显示一个单元格,但除非我使用方法set()
,否则我无法更改其值。
我想知道是否有原因?也许使用其他方法或运算符来访问和修改类Matrix
之外的单元格的内容?
就像这样:
Matrix m(4,4,0);
m(2,2) = 10000; // ERROR!
和不
m.set(2,2,10000);
答案 0 :(得分:1)
您已将int **M
设为私有变量。私有变量的想法是你明确地不能在类之外更改它(参见http://www.cplusplus.com/doc/tutorial/classes/)。你可以做以下两件事之一:
将对元素的引用返回为:
int &operator() (unsigned row, unsigned col)
{
return M[row][col];
}
将int **M
设为公共变量。这样您就可以正常访问main.cpp中的m.M[2][2]
。