我有一个定义 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/