重载*运算符

时间:2017-09-03 08:25:25

标签: c++ matrix operator-overloading overloading

我想重载*运算符有两个目的:

第一目的:

m4 * 3.5; //m4 is a matrix object

以上使用此功能,这里的实现绝对没问题

Matrix operator *(const double n)

然而,当我尝试相反时,即

3.5 * m4;

我收到错误消息,说没有匹配的功能。所以我为这个特殊情况做了这个功能

Matrix operator *(const double n, Matrix &obj)
{
    for(unsigned int i = 0; i < rows; i++ )
    {
        for(unsigned int j = 0; j < cols; j++)
        {
            obj[i][j] =  obj[i][j] * n;
        }

    }

    return *this;
}

现在,我收到错误:

  

错误:'Matrix Matrix :: operator *(double,Matrix&amp;)'必须采用零或一个参数      矩阵运算符*(const double n,Matrix&amp; obj);

     

错误:'operator *'不匹配(操作数类型为'double'和   “矩阵”)
  cout&lt;&lt; 3.5 * m4&lt;&lt; ENDL;

我不确定如何克服操作数的问题!

不幸的是我不能使用BLAS,Eigen等。这项任务要求我们努力克服这种矩阵的废话。

1 个答案:

答案 0 :(得分:3)

您已Matrix operator *(const double n, Matrix &obj)成为Matrix的成员,这意味着它有this的隐含第一个参数。你需要做的是使它成为非成员函数。

另请注意,它不应修改操作数,因此您应该通过const引用传递Matrix

Matrix operator *(const double n, const Matrix &obj);

对于你的第一个重载也是如此,它应该是一个const成员函数

Matrix operator *(const double n) const;

或非会员:

Matrix operator *(const Matrix& mat, const double n);