Version [22772]
Dies ist eine alte Version von ObjProg04Operator erstellt von RonnyGertler am 2013-03-29 00:17:46.
Objektorientierte Programmierung - Kapitel 4 - Operator - Überladung
File | Last modified | Size |
---|---|---|
oop15.gif | 2023-10-06 18:37 | 3Kb |
oop16.gif | 2023-10-06 18:37 | 2Kb |
oop17.gif | 2023-10-06 18:37 | 3Kb |
oop18.gif | 2023-10-06 18:37 | 4Kb |
oop19.gif | 2023-10-06 18:37 | 13Kb |
oop20.gif | 2023-10-06 18:37 | 7Kb |
Inhalte von Dr. E. Nadobnyh
4.1. Grundlagen und Regeln
Operator-Überladung
Ein Operator ist überladen, wenn er je nach Typ der Operanden eine unterschiedliche Bedeutung hat.
Die meisten Operatoren für eingebauten Datentypen sind schon überladen.
Beispiel:
double a, b; short x, y;
a*b; x*y; //verschiedene Algorithmen
Operatorfunktion
In C++ gibt es die Möglichkeit , Operatoren für die Klassen zu definieren.
Eine Operatorfunktion ist eine Funktion mit einem besonderen Namen. Der Name der Operatorfunktion beginnt mit dem Schlüsselwort operator, dem das Operatorsymbol folgt. Ausdrücke mit Operatoren sind intuitiver und daher schneller zu erfassen als Ausdrücke mit Funktionsaufrufe.
Zwei Definitionsmöglichkeiten
Eine Operatorfunktion kann entweder als globale Funktion oder als Methode einer Klasse definiert werden.
1) Globale Operatorfunktion
class Bruch{ };
Bruch operator+ (Bruch, Bruch );
bzw. Operatorfunktion als Methode
class Bruch
{ public:
Bruch operator+ (Bruch x);
};
4. Operator-Überladung
Aufruf der Operatorfunktion
Der Operator-Aufruf wird in einen Funktionsaufruf umgewandelt:
1) entweder in den Aufruf der globalen Operatorfunktion,
2) oder in den Aufruf der Operatormethode.
Mehrdeutigkeit
Wenn Compiler mehr als eine Aufrufmöglichkeit findet, wird der Aufruf bemängelt.
⇒ Demo 1.
Globale Operatorfunktion
class Bruch; //Vorwärtsdeklaration
Bruch operator+(Bruch a, Bruch b); //Deklaration
class Bruch
{ //Freundschaftserklärung
friend Bruch operator+(Bruch a, Bruch b);
};
main()
{ Bruch a, b, c;
c = a + b; //Aufruf
c=operator+(a,b); //identisch
}
Bruch operator+(Bruch a, Bruch b); //Deklaration
class Bruch
{ //Freundschaftserklärung
friend Bruch operator+(Bruch a, Bruch b);
};
main()
{ Bruch a, b, c;
c = a + b; //Aufruf
c=operator+(a,b); //identisch
}
⇒ Demo 1.2
CategoryObjProg