Commutativa operatore sovraccarico + 2 oggetti diversi
-
04-10-2019 - |
Domanda
Ho 2 classi che rappresentano una matrice:
1. RegularMatrix - O (n ^ 2) Rappresentazione
2. matrice sparsa -. Una matrice che è rappresentato come lista collegata (senza zeri)
Diciamo che ho:
RegularMatrix a;
SparseMatrix b;
Voglio essere in grado di fare:
a+b;
ed anche:
b+a;
in modo che io sto sovraccaricare l'operatore +. La mia domanda è, perché voglio l'aggiunta di essere commutativa (a + b = b + a), non ho bisogno di implementare 2 sovraccarichi, uno per ciascun caso?
RegularMatrix operator+(const RegualarMatrix &, const SparseMatrix &);
RegularMatrix operator+(const SparseMatrix & ,const RegualarMatrix &);
o c'è una forma generale che il compilatore decide da sola?
Grazie
Soluzione
Si avete bisogno di entrambe le versioni. Ma è possibile inoltrare l'uno all'altro, se l'operazione è davvero commutativa
RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b) {
return b + a;
}
Altri suggerimenti
sono tenuti Entrambe le versioni, basta scrivere dopo la prima sovraccarico:
RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b)
{
return operator+(b,a);
}
o versione più semplice:
RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b)
{
return b + a;
}