Commutative Betreiber Überlastung + 2 verschiedene Objekte
-
04-10-2019 - |
Frage
Ich habe 2 Klassen, die eine Matrix darstellen:
1. RegularMatrix - O (n ^ 2) Darstellung
2. Dünnbesetzte Matrix -. Eine Matrix, die als verknüpfte Liste (ohne Nullen) dargestellt wird
kann sagen, ich habe:
RegularMatrix a;
SparseMatrix b;
ich will tun können:
a+b;
und auch:
b+a;
ich bin also den Operator + überlasten. Meine Frage ist, da ich die Zugabe wollen kommutativ ist (a + b = b + a), habe ich 2 Überlastungen implementieren müssen, eine für jeden Fall?
RegularMatrix operator+(const RegualarMatrix &, const SparseMatrix &);
RegularMatrix operator+(const SparseMatrix & ,const RegualarMatrix &);
oder ist es eine allgemeine Form, die der Compiler selbst entscheidet?
Danke
Lösung
Ja müssen Sie beide Versionen. Aber Sie können die einem zum anderen weiterzuleiten, wenn die Operation wirklich kommutativ
RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b) {
return b + a;
}
Andere Tipps
Beide Versionen erforderlich sind, schreiben Sie einfach nach dem ersten Überlast:
RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b)
{
return operator+(b,a);
}
oder einfachere Version:
RegularMatrix operator+(const SparseMatrix &a, const RegualarMatrix &b)
{
return b + a;
}