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 nichtBei 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
-
Ü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
-
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