Operatorüberladung
-
pumuckl schrieb:
string operator!(Name)Name ist kein Typ -> Die Typangabe fehlt.
Kann man denn operator! auch binär überladen? Das wäre dann eher operator!=, und der gibt 1) nen bool zurück und 2) nimmt der normalerweise den selben Klassentyp als Parameter entgegen:
bool Type::operaor!=(const Type& other) const
-
Also wenn ich schreibe
string operator!(string Name)bekomme ich den Fehler
Der unaere Operator '!' hat zu viele formale ParameterDas ist dann wohl auch das Problem das l'abra d'or angesprochen hat.
Ich habe mir den Link gerade angeschaut, aber damit kann ich nicht so viel anfangen ehrlich gesagt.
Das war eine Prüfungsaufgabe die den Methodenkörper vorgegeben hat. Die Aufgabe hieß dann "überladen Sie den !-Operator so dass ein Name wieder gelöscht wird". In einer zweiten Aufgabe war dann der Aufruf abgefragt. Ich dachte eben dass es so funktioniert, aber jetzt komme ich nicht mehr weiter.
-
Lass den Parameter einfach weg.
-
Hey, Super, das klappt. Vielen Dank!
-
Du hast die Funktion zur Operatorüberladung in der Klasse definiert. Deshalb brauchst du keine Parameter bei unären Funktionen.
-
Und bei + brauche ich Parameter weil es ein binärer Operator ist, oder?
Aber warum wird dann nur ein Parameter benötigt?
-
laura84 schrieb:
Und bei + brauche ich Parameter weil es ein binärer Operator ist, oder?
Aber warum wird dann nur ein Parameter benötigt?Wenn du einen Operator als eine Klassenmember implementierst, wird der erste Parameter implizit mitgegeben. (Der des aktuellen Objektes natürlich).
Unär: erwartet einen Parameter. Wirkt also direkt auf das Objekt.
Binär: erwartet 2 Parameter. Erster Parameter ist das Objekt selbst und das zweite musst du angeben.
-
Weil der erste Parameter die Klasse bzw das Objekt selbst ist.
Würdest du den Operator außerhalb der Klasse stellen, würdest du wieder beide Operatoren angeben müssen.
-
Dein Code ist also ziemlich patriarchalisch

-
Okay, vielen Dank an euch alle. Wieder mal was dazu gelernt.

-
Ich finde es noch wichtig zu sagen, dass es eher üblich ist, binäre Operatoren wie
+ausserhalb der Klasse, also als freie Funktionen zu implementieren. Warum, erfährst du im Link von l'abra d'or. Lies den Artikel, dort stehen wertvolle Informationen und Best Practices drin!