我有一个类定义了一个维度矩阵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;
你能给我一个关于我需要超载的运算符的提示吗?感谢。
答案 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
//...
}