Operatoren überladen



  • Hallo,

    ich habe eine Frage zum Thema Operatoren überladen.

    Angenommen es gibt zwei Klassen A und B, B erbt von A.

    A operator+(A &sum){
    //addiere die Member
    }
    
    A a1,a2
    B b1 b2;
    a2=a1+b1;  // Funktioniert  
    a2=b1+a1;  // Funktioniert nicht
    

    Bei der ersten Addition ist es möglich als Parameter ein Objekt vom Typ B zu übergeben. Wieso klappt das im Fall der zweiten Addition nicht? Der erste Operand wird dadurch bestimmt zu welcher Klasse die Funktion gehört. Wieso aber kann da nicht auch ein Objekt von Typ B übergeben werden? Ich kann es hinnehmen, aber sehe dahinter erstmal keinen Sinn darin, es nicht auch hier zu erlauben. Kann mir jemand mit dieser Frage helfen?

    Grüße,
    Erano1


  • Mod

    Überlade doppelseitige Operatoren nicht als Klassenmember, sondern als freie Funktionen. Dann funktioniert das. Siehe auch:
    https://www.c-plusplus.net/forum/232010



  • Hallo,

    vielen Dank, deine Antwort hat mir sehr geholfen. Also ist es allgemein gute Praxis die Operatoren in solchen Fällen nicht als Klassenmember zu überladen?

    Grüße,
    Erano1


  • Mod

    Kommt drauf an, was du nach Lesen des verlinkten Artikels (du hast ihn doch hoffentlich gelesen?) unter "solchen Fällen" verstehst. Da wird das doch recht deutlich erklärt.

    Wenn du darunter verstehst, dass, wenn immer du einen Operator mit zwei gleichartigen Seiten hast (also zum Beispiel Addition, aber nicht Zuweisung), du ihn als freie Funktion implementieren solltest, dann Ja.

    Falls du irgendetwas anderes meinen solltest: Nein.



  • Hallo,

    SeppJ schrieb:

    Wenn du darunter verstehst, dass, wenn immer du einen Operator mit zwei gleichartigen Seiten hast (also zum Beispiel Addition, aber nicht Zuweisung), du ihn als freie Funktion implementieren solltest, dann Ja.

    Darauf wollte ich hinaus, danke 🙂

    Grüße,Erano1


Anmelden zum Antworten