1

我有一个类,它定义了一个尺寸为 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;

你能告诉我我需要重载哪些运算符吗?谢谢。

4

1 回答 1

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
   //...
}
于 2013-05-06T22:18:11.337 回答