C++ 修改/访问矩阵内容C++;
我有一个表示矩阵的类的代码:C++ 修改/访问矩阵内容C++;,c++,matrix,operator-overloading,C++,Matrix,Operator Overloading,我有一个表示矩阵的类的代码: 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]; fo
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;
}
};
而不是
您已将
int**M
设置为私有变量。私有变量的概念是,您不能在类之外显式地更改它(请参阅)。您可以执行以下两种操作之一:
int&运算符()(无符号行、无符号列)
{
返回M[行][col];
}
int**M
成为公共变量。这将允许您正常访问main.cpp中的m.m[2][2]
返回对元素的引用。但认真地说,用一块数据来实现矩阵。在这里使用动态数组的动态数组没有意义。要在@juanchopanza的基础上添加一个签名为
int&operator()(int x,int y)
的方法,谢谢!现在它工作了。。。你能更详细地解释一下为什么如果我返回一个引用/地址有效,而如果我返回的值无效。谢谢当您有一个私有变量时,只有类可以直接更改它。因此,如果你说m.m[2][2]=3代码>当它还是私有的时候,你的编译器会对你大喊大叫。但是,当您传递引用时,您不是直接更改m.m
,而是更改对它的引用。
Matrix m(4,4,0);
m(2,2) = 10000; // ERROR!
m.set(2,2,10000);