Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Operatorüberladung + - * / % ^ & | ~ ! , = < > <= >= ++ --

Ähnliche Präsentationen


Präsentation zum Thema: "Operatorüberladung + - * / % ^ & | ~ ! , = < > <= >= ++ --"—  Präsentation transkript:

1 Operatorüberladung + - * / % ^ & | ~ ! , = < > <= >= ++ --
== != && || += -= /= %= ^= &= |= *= «= »= [] () -> ->* new delete

2 Operatorüberladung Keine Überladung für . .* :: ?: sizeof -operator
Neue Operatoren können nicht definiert werden Eigenschaften bleiben erhalten Unär/binär Assoziativität Priorität Ein Operand muss von einem Klassendatentyp sein

3 Operatorüberladung Überladung durch
Memberfunktion (linker Operand vom Klassentyp) Nicht Memberfunktion (friend) Operatoren () und [] können nur durch Memberfunktionen überladen werden. (Beispiel Array- Klasse) Rückgabe einer Referenz, wenn das Ergebnisobjekt bereits existiert (+=, =, *= ...) Rückgabe des Objektes, wenn ein neues Objekt erzeugt wird (+, )

4 Operatorüberladung Varianten
Als Memberfunktion Der erste Operand muss vom Typ der eigenen Klasse sein erg_type () erg_type (arg_type operand2) Als Friend erg_type (arg_type op) erg_type (class_type op 1, arg_type op2) erg_type (arg_type op 1, class_type op2) Kommutativität ergibt sich nicht automatisch, es müssen dann zwei Operatorfunktionen realisiert werden.

5 Operatorüberladung Aufruf
Aufruf durch Verwendung im Ausdruck mystring s1=“Hans “; s1=s1+“Huckebein“; Aufruf als Funktion s1=s1.operator+(“Huckebein“); oder s1.operator=(s1.operator+(“Huckebein“));

6 Operatorüberladung Konvertierung
Ein Konstruktor mit nur einem Argument (beim Aufruf) heißt Konvertierungskonstruktor Konvertierung Fremdtyp → eigenen Klassentyp fraction(long num, long den=1); Um den impliziten Aufruf zu verhindern, kann explizit davor angegeben werden. (wird verwendet um Mehrdeutigkeiten aufzulösen, bedingt aber mehr Schreibaufwand)

7 Operatorüberladung Konvertierung
Zur Konvertierung des eigenen Klassentyps in einen Fremdtyp kann man einen Konvertierungsoperator schreiben: operator double() {return (double)Num/Denom;} Angabe von explizit zur Verhinderung von Mehrdeutigkeiten möglich


Herunterladen ppt "Operatorüberladung + - * / % ^ & | ~ ! , = < > <= >= ++ --"

Ähnliche Präsentationen


Google-Anzeigen