Как эти две функции действуют как геттеры и сеттеры? - PullRequest
0 голосов
/ 19 марта 2020

Я изучаю матричные операции, и наш учитель предоставил нам следующие 3 функции:

//methods used as GETTERS and SETTERS - to access the matrix elements
    float& mat3::at(int i, int j) {
        return matrixData[i + 3 * j];
    }

    const float& mat3::at(int i, int j) const {
        return matrixData[i + 3 * j];
    }

    mat3& mat3::operator =(const mat3& srcMatrix) {
        //usage example for the "at" getter/setter methods
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                //at(i,j) acts as a setter
                //srcMatrix.at(i, j) is used as a getter
                at(i, j) = srcMatrix.at(i, j);
            }   
        }

        return (*this);
    }

Я понял, что srcMatrix.at (i, j) действует как получатель, это довольно очевидно потому что функции возвращают значение в этом месте. Но я не могу понять, почему он действует как сеттер, так как нет назначения. И какая из функций at является геттером, а какая сеттером?

1 Ответ

1 голос
/ 19 марта 2020

Первая функция-член float& mat3::at(int i, int j) может использоваться как установщик. Поскольку он возвращает не-const ссылку, которую вы можете присвоить его результату, чтобы изменить элементы матрицы.

Например, srcMatrix.at(i,j) = 4.2; установит элемент в этой позиции на 4.2.

Вторая перегрузка const float& mat3::at(int i, int j) const может действовать только как геттер. Результатом является ссылка const, поэтому невозможно присвоить результат. Он предусмотрен для того, чтобы все еще можно было получить значение элемента, если у вас есть const mat3.

...