Порядок аргументов в перегруженных операторах в C ++ - PullRequest
1 голос
/ 22 марта 2020

Я кодирую матричный калькулятор и хотел, чтобы он вычислял такие операции, как: 2 * A, A * 3 (где A - матрица). Итак, я написал это:

matrix operator* (double x , matrix mat)
{
    matrix temp(mat.n);

    for (int i = 0; i < mat.n; ++i)
        for (int j = 0; j < mat.n; ++j)
            temp.t[i][j] = mat.t[i][j] * x;

    return temp;
}

matrix operator* (matrix mat, double x)
{
    matrix temp(mat.n);

    for (int i = 0; i < mat.n; ++i)
        for (int j = 0; j < mat.n; ++j)
            temp.t[i][j] = mat.t[i][j] * x;

    return temp;
}

(matrix - это имя класса, n - это размер (матрицы квадратные), t - это c, 2-мерный массив t [n ] [n])

Как видите, я кодировал 2 совершенно идентичные функции, единственное отличие которых заключается в порядке аргументов. Есть ли способ объединить их в одну? Кроме преобразования x в диагональную матрицу и умножения их на 2 матрицы.

(кстати, это мой первый пост на этом форум, так что, пожалуйста, не стесняйтесь sh задавать мне такой тривиальный вопрос)

1 Ответ

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

Просто заставьте одну функцию вызывать другую:

matrix operator* (double x , matrix mat)
{
    matrix temp(mat.n);

    for (int i = 0; i < mat.n; ++i)
        for (int j = 0; j < mat.n; ++j)
            temp.t[i][j] = mat.t[i][j] * x;

    return temp;
}

matrix operator* (matrix mat, double x)
{
    return x * mat;
}
...