Polymorphie von Operatoren (Polymorphie von Operatoren), Lektion, Seite 723356
https://www.purl.org/stefan_ram/pub/polymorphie_in_c++ (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C++-Kurs

Überladung von Operatoren

Überladung des Operators »+«

Die C++ -Implementation enthält zwei  Programme: Eines für eine numerische Addition »int+int« und eines für eine Zeichenfolgenverbindung »::std::string+::std::string«. Bei der Übersetzung einer Anwendung des Operators »+« bildet der Compiler aus dem Ausdruck eine Signatur  und verwendet diese, um das Programm festzulegen, das die Division ausführen soll.

main.cpp
#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main() { ::std::cout << 1 + 2 << "\n"s; }
Protokoll
3
::std::cout
abcdef
main.cpp
#include <iostream>
#include <ostream>
#include <string>

using namespace ::std::literals;

int main() { ::std::cout << "abc"s + "def"s << "\n"s; }
::std::cout
abcdef

Überladung des Operators »/«

Die C++ -Implementation enthält zwei Programme: Eines für eine ganzzahlige Division „int /int “ und eines für eine Division mit Nachkommastellen „double /double “. Bei der Übersetzung des Programms bildet der Compiler aus dem Ausdruck eine Signatur und verwendet diese, um das Programm festzulegen, das die Division ausführen soll.

Der Typ des gesamten Ausdrucks und seines Wertes ergibt sich gemäß der folgenden Tabelle.

Typ der Division
int /int  = int 
double /double  = double

Überladung des unären Operators »-«

Es gibt zwei verschiedene Programme für einen Typwechsel: Das Programm »-int« kann das Vorzeichen eines int-Wertes wechseln, während das Programm »-double« das Vorzeichen eines double-Wertes wechseln kann.

Wenn der Ausdruck »-2« ausgewertet werden soll, dann bildet die Implementation zunächst die Signatur dieses Ausdrucks. Das ist »-int«. Anschließend wird das passende Programm »-int« gestartet, um das Vorzeichen zu ändern.

Wenn der Ausdruck »-2.3« ausgewertet werden soll, ergibt sich die Signatur »-double«, und entsprechend wird das Programm »-double« gestartet.

Ein bestimmtes Programm, das bei Verwendung eines Operators ausgeführt wird, bezeichnen wir auch als eine Implementation  (Umsetzung, Realisierung, Verwirklichung) dieses Operators. Wenn keine Mißverständnisse möglich sind, spricht man auch einfach kurz von einer Implementation. Der Operator »-« hat zwei Implementationen : »-int« für den Vorzeichenwechsel bei int-Werten und »-double« für den Vorzeichenwechsel bei double-Werten.

Polymorphie: zum Operator »-« gehören zwei verschiedene Implementationen (Programme)
»-2« --> -int --> Vorzeichenwechselprogramm für int-Werte
»-2.3« --> -double --> Vorzeichenwechselprogramm für double-Werte

Der Programmierer muß also nicht selber das passende Programm für den Operator »-« festlegen, sondern es wird an Hand des Typs des Operanden von der Implementation automatisch richtig ausgewählt.

Ohne  Polymorphie wären verschiedene  Operatorzeichen notwendig
⊟ = Vorzeichenwechselprogramm für int-Werte
⊖ = Vorzeichenwechselprogramm für double-Werte
65
65.0

Die Fähigkeit eines Operators, wie »-«, für mehrere Programme zu stehen, die dann an Hand des Typs des Operanden ausgewählt werden, wird Polymorphie  genannt, und der zugehörige Operator wird auch als polymorph  bezeichnet.

Man sagt auch manchmal, der Operator sei überladen, also mit verschiedenen Bedeutungen für verschiedene Typen „beladen“, und nennt diese Überladung eines Operators Operatorüberladung  (eine Form von Polymorphie ).

Unter Auflösung  verstehen wir, bei einer Mehrdeutigkeit zu erkennen, welche der möglichen Bedeutung genau vorliegt. Eine Überladungsauflösung  besteht darin, bei einer Überladung zu erkennen, welche der verschiedenen Bedeutungen des Überladenen vorliegt.

Datentypen erlauben es, zu erkennen, ob die Anwendung eines Operators auf einen Ausdruck überhaupt  zulässig ist. So kann »-"2"« als Fehler erkannt werden. Außerdem erlauben es Datentypen, wenn die Anwendung als zulässig erkannt wurdem, dem Operator das richtige Programm zuzuordnen, wie eben erklärt wurde. Ohne Datentypen und Polymorphie müßte der Programmierer diese Arbeit erledigen, indem er für int-Numeralia einen anderen  Operator verwendet als für double-Numeralia.

Die Polymorphie „versteckt“ den genauen Typ eines numerischen Operanden gewissermaßen vor dem Programmierer. Dieser muß sich bei der Festlegung eines Operators zum Vorzeichenwechsel keine Gedanken darüber machen, ob ein Operand den Typ »int« oder »double« hat, denn er kann den Operator »-« gleichermaßen verwenden.

Die Polymorphie ist genauso eine Eigenschaft natürliche Sprachen: Man kann ein Auto oder ein Hemd „waschen“, obwohl die genaue Vorgehensweise (Implementation, Umsetzung, Realisierung, Verwirklichung) jeweils unterschiedlich ist.

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723356 stefan_ram:723356 Polymorphie von Operatoren Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723356, slrprddef723356, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/polymorphie_in_c++