() = перегрузка оператора в классе - PullRequest
1 голос
/ 20 марта 2012

Я строю класс Matrix для всех операций, таких как сложение, вычитание, умножение, обратное и т. Д. Я перегружен простыми операторами, такими как + - () *. Но я пытаюсь установить значение строки и столбца с помощью ().

Образец будет такой

Matrix(1,1) = 10;

при условии, что строка 1, столбец 1 будет установлена ​​на 10.

Пример моей дополнительной перегрузки:

friend Matrix operator +(Matrix&, Matrix&);

Как мне этого добиться?

спасибо!

Ответы [ 3 ]

3 голосов
/ 20 марта 2012

Это похоже на то, что вы уже сделали:

Value &operator()(int x, int y)
{
    return matrix[x][y]; // or whatever it's supposed to be
}

, где Value - ваш внутренний тип.

Однако вместо этого я предлагаю использовать функцию установки, посколькугораздо менее неоднозначно.например:

void set(int x, int y, Value v)
{
    matrix[x][y] = v;
}
3 голосов
/ 20 марта 2012

Ваша матрица должна обеспечивать доступ к элементам, например, через operator():

template <typename T>
class Matrix
{
public:
    T & operator()(size_t i, size_t j) { return buf[i * NCols + j]; } // Example
    T const & operator()(size_t i, size_t j) const { /* same */ }

    // ...
};

Тогда вы можете сказать:

Matrix<bool> m(20, 20);

m(12, 15) = false;
m(8, 19) = m(1, 2) = true;
return m(0, 0);
1 голос
/ 20 марта 2012

Использование

class Matrix {

    T& operator()(size_t x, size_t y) {
        return _mat[x][y]; //Or however your datastructure works
    }

    const T& operator() (size_t x, size_t y) const {
        return _mat[x][y];
    }


};

Где T - тип данных, который содержит ваша матрица.Вернуть данные в (x, y).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...