修改/访问矩阵内容C ++

时间:2014-06-03 20:28:11

标签: 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];

        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);

1 个答案:

答案 0 :(得分:1)

您已将int **M设为私有变量。私有变量的想法是你明确地不能在类之外更改它(参见http://www.cplusplus.com/doc/tutorial/classes/)。你可以做以下两件事之一:

  1. 将对元素的引用返回为:

    int &operator() (unsigned row, unsigned col) { return M[row][col]; }

  2. int **M设为公共变量。这样您就可以正常访问main.cpp中的m.M[2][2]