矩阵类c++作为matlab的重载运算符

matrix class C++ as matlab operator overload

本文关键字:重载 运算符 matlab 作为 c++      更新时间:2023-10-16

我有一个定义维数为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,然后赋值给那个位置一个双精度值。然而,如果我能像在matlab或r中那样赋值,那就太好了。

mymatrix(i,j) = 1.0;

你能给我一个提示,我需要重载哪些操作符吗?谢谢。

假设你的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
   //...
}