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

标签 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;

您能否提示我需要重载哪些运算符?谢谢。

最佳答案

假设您的 m 代表您的 Matrix 的高度而 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
   //...
}

关于c++ - 矩阵类 C++ 作为 matlab 运算符重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16408193/

相关文章:

c++ - C 和 C++ 之间的条件运算符区别

C++:仅接受字符串文字的构造函数

rust - 如何编写支持+=操作的特征绑定(bind),其右手是Rust中复杂情况下的引用

angular - 在 Angular 应用程序中动态添加运算符到 Rxjs observable

c++ - 显式关键字应用于运算符而不是构造函数

c++ - friend 类需要包含或转发声明 C++?

c++ - 使用 C 字符串和指针。删除除小写字母和空格之外的所有字符

c++ - 从文本文件创建 vector vector

在子类中使用 "super"并在父类(super class)中使用 "this"的 Java 运行时方法选择

C++ 重载 [] 与转换