Коммутативная перегрузка оператора + из 2-х разных объектов

StackOverflow https://stackoverflow.com/questions/3764604

Вопрос

У меня есть 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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top