Gleichheitsoperator bei Vererbung?



  • Einen schönen Weihnachtsfeiertag wünsche ich 🙂 Ich hätte da zwei Fragen:

    1.) Wird bei einer Klasse standardmäßig der ==-Operator definiert? Ich habe hier einen Compiler der lässt einen Vergleich von Objekten per "==" nicht zu, deswegen vermute ich, dass man den Operator selbst definieren muss?

    2.) Wie sieht die Definition des Operators bei Vererbung aus?

    Beispiel:

    B erbt von A. Muss ich jetzt den ==-Operator in A und B definieren und in B sieht das dann irgendwie so aus:

    class B : public A {
         bool operator==(B& toCmp) {
            if (!A::operator ==(this, toCmp) || var1 != toCmp.var1)
                 return false;
    
            return true;
         }
    };
    

    Bin da gerade überfordert, ein Syntaxbeispiel wäre schön 😃 :xmas2:



  • Hobbit123 schrieb:

    1.) Wird bei einer Klasse standardmäßig der ==-Operator definiert? Ich habe hier einen Compiler der lässt einen Vergleich von Objekten per "==" nicht zu, deswegen vermute ich, dass man den Operator selbst definieren muss?

    Richtig vermutet.

    Hobbit123 schrieb:

    2.) Wie sieht die Definition des Operators bei Vererbung aus?

    Schlecht. Es gibt ein paar Tricks, aber im Allgemeinen ist es unmöglich, einen richtig arbeitenden Gleichheitsoperator bei Vererbung zu schreiben.

    Hobbit123 schrieb:

    B erbt von A. Muss ich jetzt den ==-Operator in A und B definieren und in B sieht das dann irgendwie so aus:

    Bevor du das tust, musst du dir ein paar Gedanken machen.

    A a;
    B b1, b2;
    b1 == a // was soll da passieren?
    a == b2 // was soll da passieren?
    // Problem: wenn b1==a und a==b2 dann muss gelten b1==b2
    

Anmelden zum Antworten