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

È stato utile?

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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top