Beispielprogramm: UEBERLAD.CPP
Das Programm UEBERLAD.CPP ist ein Beispiel für das Überladen von Funktionsnamen. Diese Technik ist in ANSI-C nicht verfügbar, sehr wohl aber in C++ und wird auch regelmäßig angewendet. Auf den ersten Blick wird sie etwas eigenartig anmuten, ist aber einer der Grundbausteine objektorientierten Programmierens. Die Nützlichkeit und den Sinn dieses Konstrukts werden wir im Laufe dieser Einführung noch sehr zu schätzen lernen.
Dieses Programm hat außer der Funktion main() noch drei zusätzliche Funktionen, und alle drei tragen denselben Namen. Deine erste Frage wird nun sein: "Welche Funktion rufe ich mit MachWas() eigentlich auf?" Die Antwort auf diese Frage ist: Du rufst die Funktion mit der richtigen Anzahl an formellen Variablen des richtigen Typs auf. Rufst Du MachWas() mit einer ganzen Zahl oder einer Variable vom Typ int als eigentlichem Parameter auf, wird die Funktion, die in Zeile 25 beginnt, ausgeführt. Wenn der eigentliche Parameter vom Typ float ist, wird die Funktion in Zeile 30 aufgerufen, hat der Funktionsaufruf zwei float Werte oder Variablen als Argumente, wird die Funktion in Zeile 36 ausgeführt.
Der Rückgabewert wird zur Feststellung der passenden Funktion nicht herangezogen. Allein die Typen der formellen Parameter werden verwendet, um festzustellen, welche der überladenen Funktionen aufgerufen wird.
Das Schlüsselwort overload in Zeile 4 sagt dem System, daß es wirklich Deine ernste Absicht ist, den Namen MachWas zu überladen und dies nicht aus Versehen geschieht. Dies wird aber nur von sehr frühen Versionen von C++ verlangt. Neuere Versionen verlangen dieses Schlüsselwort nicht mehr, es ist aber aus Kompatibilitätsgründen nach wie vor (noch) erlaubt. Es ist nicht notwendig, overload zu verwenden, da das Überladen in C++ generell in einem Zusammenhang geschieht, wo es offensichtlich ist, daß der Funktionsname überladen wird.
In einem endgültigen C++ Standard mag die Verwendung dieses Schlüsselwortes verboten sein. Wie gesagt, C++ ändert sich und wir müssen bereit sein, uns mit der Sprache zu ändern. Tempora mutantur nos et mutamur in illis.
Die eigentliche Auswahl, welche Funktion aufgerufen wird, wird beim Kompilieren getroffen und nicht bei der Ausführung des Programmes, sodaß es zu keinen Geschwindigkeitseinbußen kommt. Würden wir jeder der Funktionen mit dem überladenem Namen einen einzigartigen Namen verleihen, wäre kein Unterschied in der Größe des Programmes oder in seiner Geschwindigkeit festzustellen.
Das Überladen von Funktionsnamen mag Dir eigentümlich vorkommen und das ist es auch, wenn man an die Regeln von K&R oder ANSI-C gewöhnt ist. Hast Du aber einmal etwas Erfahrung mit C++ gesammelt, wirst Du das Überladen ganz selbstverständlich und oft in Deinen Programmen verwenden.
Beachte die Verwendung des Schlüsselwortes const in einigen Funktionsprototypen und -köpfen. Dies bewahrt die Programmiererin, wie gesagt, davor, den formellen Parameter innerhalb der Funktion zu ändern. In einer Funktion, die so kurz ist wie die Funktionen dieses Programmes, besteht keine wirkliche Gefahr einer irrtümlichen Zuweisung. In einer wirklichen Funktion kannst Du aber ganz schnell auf den ursprünglichen Zweck einer Variable vergessen, wenn Du die Funktion später einmal modifizierst.
Copyright © 1997, 1998, 2001-2006 Heinz Tschabitscher - Letzte Änderung 10. Dezember 2005
Heinz Tschabitscher - | Datenschutz | Impressum - Kommentare, Kritik, Anregungen, Beschwerden?