У меня есть класс, который определяет матрицу измерений 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
//...
}
Других решений пока нет …