()=类中的运算符重载

时间:2012-03-19 22:49:23

标签: c++ class operator-overloading

我正在为所有操作构建Matrix类,例如加法,减法,乘法,逆等。我重载了+ - () *这样的简单运算符。但我正试图通过() 设置行和列值。

样本就是这样

Matrix(1,1) = 10;

假设第1行,第1列将设置为10.

我的加法重载样本就是这个

friend Matrix operator +(Matrix&, Matrix&);

我怎样才能做到这一点?

谢谢!

3 个答案:

答案 0 :(得分:3)

它与您已经完成的工作类似:

Value &operator()(int x, int y)
{
    return matrix[x][y]; // or whatever it's supposed to be
}

,其中Value是您的内部类型。

但是,我建议使用setter函数,因为它不那么模糊。 e.g:

void set(int x, int y, Value v)
{
    matrix[x][y] = v;
}

答案 1 :(得分:3)

您的矩阵应提供元素访问器,例如通过operator()

template <typename T>
class Matrix
{
public:
    T & operator()(size_t i, size_t j) { return buf[i * NCols + j]; } // Example
    T const & operator()(size_t i, size_t j) const { /* same */ }

    // ...
};

然后你可以说:

Matrix<bool> m(20, 20);

m(12, 15) = false;
m(8, 19) = m(1, 2) = true;
return m(0, 0);

答案 2 :(得分:1)

使用

class Matrix {

    T& operator()(size_t x, size_t y) {
        return _mat[x][y]; //Or however your datastructure works
    }

    const T& operator() (size_t x, size_t y) const {
        return _mat[x][y];
    }


};

其中T是矩阵所持有的数据类型。返回(x,y)处的数据。