Wissensdatenbank Wirtschaftsrecht

aktuelles Dokument: ObjProg04Operator
image4
image3
image2
image1
 Alle Kategorien:
  Forschungsdatenbank
  Lehrveranstaltungen
  Lexikon
  Literatur
  Rechtsgebiete
  Rechtsprechung
  Service
  Studium F H S
  Wissensmanagement
ich war hier: ObjProg04Operator

Version [22774]

Dies ist eine alte Version von ObjProg04Operator erstellt von RonnyGertler am 2013-03-29 00:27:31.

 

 (image: http://wdb.fh-sm.de/uploads/QualipaktLehre/BMBF_Logo_klein.jpg)

Objektorientierte Programmierung - Kapitel 4 - Operator - Überladung

Attachments
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 );

2) Operatormethode

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.

 (image: https://hssm.hqedv.de/uploads/ObjProg04Operator/oop15.gif)


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  
}


⇒ Demo 1.2


Operatormethode


class Bruch
{    public:    Bruch operator+(Bruch  b);
};
main()
{   Bruch a, b, c;
     c = a + b;                     //Aufruf
     c=a.operator+(b);       //identisch
}



Operanden


Der zweistellige Operator hat zwei Operanden. Der erste Operand ist ein Objekt, für das die Methode aufgerufen wird.

⇒ Demo 3.


Einsatzregeln


1) Es können bis auf wenige Ausnahmen alle Operatoren überladen werden.

2)Der Funktionsname besteht aus dem Schlüsselwort operator und dem Operatorzeichen.

3) Es können die übliche Operatoren überladen werden (z.B. *, +=, usw.).
Eine Definition von neuen Operatoren ist nicht möglich, z.B. neuen Operator zum Potenzieren. Andere Zeichen wie $ usw. sind nicht erlaubt.

⇒ Demo 4. C++ Operatoren

4) Wenigstens ein Argument der Operatorfunktion muss ein class –Objekt sein, oder die Operatorfunktion muss eine Methode sein. Die Bedeutung der Operatoren für Standard-Typen lässt sich nicht umdefinieren.

5) Die Anzahl der Operanden eines Operators (Stelligkeit) kann nicht geändert werden, d.h. ein unärer Operator bleibt unär.

6) Einige Operatoren (z.B.: +, -, * ) können getrennt unär und binär überladen werden.

⇒ Demo 5.

7) Der Operator-Aufruf wird in einen Funktionsaufruf umformuliert.

8) Die vorgegebenen Vorrangregeln können nicht verändert werden.

9) Die Reihenfolge der Auswertung (von links oder von rechts) bei der Operatoren mit gleicher Priorität bleibt erhalten.

10) Überladene Operatoren können keine Default-Parameter haben. (Eine Ausnahme ist der Funktionsoperator.)

⇒ Demo 6 + Demo 7.

Einzelne Operatoren sind nicht überladbar:

Operator Bedeutung
sizeof .
.*
::
?:
Größe von Objekten Zugriffsoperator (Strukturen, Unions, Klassen)
Zugriffsoperator für Elementzeiger
Bereichsoperator
Auswahloperator






CategoryObjProg
Diese Seite wurde noch nicht kommentiert.
Valid XHTML   |   Valid CSS:   |   Powered by WikkaWiki