Überladen von Operatoren

Aus unkompliziert.eu
Version vom 11. April 2020, 08:04 Uhr von Felix (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Überladen von Operatoren Der Aufruf von Bruch oB1 = …; Bruch oB2 = …; Bruch oB3 = oB1 + oB2; liefert einen Fehler, weil C# nicht weiß, wie man zwei Br…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu:Navigation, Suche

Überladen von Operatoren

Der Aufruf von Bruch oB1 = …; Bruch oB2 = …; Bruch oB3 = oB1 + oB2;

liefert einen Fehler, weil C# nicht weiß, wie man zwei Brüche addieren kann.

In objektorientierten Programmiersprachen können jedoch Operatoren überladen werden, um diese Funktionalität zur Verfügung zu stellen.

       public static Bruch operator +(Bruch oB1, Bruch oB2)
       {
           int iNeuerZaehler = oB1.m_iZaehler * oB2.m_iNenner +
                               oB2.m_iZaehler * oB1.m_iNenner;
           int iNeuerNenner = oB1.m_iNenner * oB2.m_iNenner;
           // Anlegen eines neuen Bruchs mit den neuen Werten:
           Bruch oErg = new Bruch(iNeuerZaehler, iNeuerNenner);
           return oErg;
       }

Durch diesen Operator ist die oben genannte Schreibweise

oB3 = oB1 + oB2

möglich.

Dadurch ist eine realitätsnähere Implementierung einer Klasse möglich.


Regeln für die Operator-Überladung

  • Eine Operator-Methode muss immer public und static sein. static bedeutet, dass die Methode ohne ein zugehöriges

Objekt aufgerufen werden kann.

  • Die Grundfunktionalität eines Operators kann nicht geändert werden, d.h. der „+-Operator“ benötigt immer zwei Operanden. Die Anzahl kann nicht geändert werden.
  • Es können nur existierende Operatoren überladen werden. Es ist z.B. kein §-Operator möglich.
  • Wenn man einen Operator überlädt, sollte man dringend auch alle anderen Operatoren der gleichen Operatoren-Familie überladen.
  • Arithmetische, bzw. Rechenoperatoren

+, -, *, /, +=, *=, /=, -=

  • Vergleichsoperatoren

>, <, >=, <=, ==, !=

Folgende Operatoren werden normalerweise nicht überladen:

  • Logische

&&, ||

  • Bit-Operatoren

&, |, !