matrix class C ++ as matlab operator overload

时间:2013-05-06 22:15:58

标签: c++ overloading operator-keyword numerical-methods

我有一个类定义了一个维度矩阵mxn,如下所示:

class Matrix{
  protected:
  int m;
  int n;
  double* mat:
  public:
  // accessors, constructors, destructors, etc.
  void assignvalue(int, int, double);
}

现在,如果我需要在位置i上分配一个值,j我有一个函数assignvalue,它取位置i,j并执行魔术并为该位置指定一个double值。但是,如果我可以像在matlab或R中那样分配一个值,那将是非常好的。

mymatrix(i,j) = 1.0;

你能给我一个关于我需要超载的运算符的提示吗?感谢。

1 个答案:

答案 0 :(得分:2)

假设您的m表示矩阵的高度,而n表示宽度,那么重载operator()这样就可以解决问题了:

double& Matrix::operator()(size_t i, size_t j)
{
    return mat[i*m+j];
}

const double& Matrix::operator()(size_t i, size_t j) const
{
    return mat[i*m+j];
}

这样,你可以这样写:

void f(Matrix & mymatrix ) {
   mymatrix(2, 3) = 5.0; // Calls the first function
   // ...
}
void f(Matrix const & m) {
   double a = m(1, 5); // Calls the second one
   //...
}