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

War es hilfreich?

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top