перегрузка — матричный класс C ++ как перегрузка оператора Matlab

У меня есть класс, который определяет матрицу измерений 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;

Можете ли вы дать мне подсказку о том, какие операторы нужно перегрузить? Благодарю.

1

Решение

Предполагая ваш 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
//...
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]