Коммутативная перегрузка оператора + из 2-х разных объектов
-
04-10-2019 - |
Вопрос
У меня есть 2 класса, которые представляют собой матрицу:
1.Представление регулярной матрицы - O (n^2)
2.SparseMatrix - матрица, которая представлена в виде связанного списка (без нулей).
допустим, у меня есть:
RegularMatrix a;
SparseMatrix b;
я хочу быть в состоянии делать:
a+b;
а также:
b+a;
поэтому я перегружаю оператор +.Мой вопрос в том, поскольку я хочу, чтобы дополнение было коммутативным (a + b = b + a), нужно ли мне реализовать 2 перегрузки, по одной для каждого случая?
RegularMatrix operator+(const RegualarMatrix &, const SparseMatrix &);
RegularMatrix operator+(const SparseMatrix & ,const RegualarMatrix &);
или существует общая форма, которую компилятор решает сам?
Спасибо
Решение
Да, вам нужны обе версии.Но вы можете переадресовать одно другому, если операция действительно коммутативна
RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b) {
return b + a;
}
Другие советы
Требуются обе версии, просто напишите после первой перегрузки:
RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b)
{
return operator+(b,a);
}
или более простая версия:
RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b)
{
return b + a;
}
Не связан с StackOverflow