C++-Programmierung/ OOP/ Methoden (nicht) überschreiben

Aus Wikibooks

Wechseln zu: Navigation, Suche


[Bearbeiten] Einleitung

Als Ausgangspunkt nehmen wir die beiden Klassen Person und Employee aus dem vorhergehenden Abschnitt.

[Bearbeiten] 2 gleiche Namen, 1 Aufruf

Wir haben der Klasse Employee zwar schon neue Funktionen hinzugefügt. Bis jetzt hatten diese einzigartige Namen, die nicht in der Basisklasse Person vorgekommen sind (z. B. get_salary()). Nun machen wir folgenden Versuch: Wir fügen Employee eine Methode void info() hinzu. Da ein solcher Member bereits in Person existiert erwarten wir, dass uns der Compiler einen Fehler ausgibt.

Entgegen unserer Erwartung jedoch wird alles fehlerfrei übersetzt. Dies kommt daher, dass die Methode aus der Elternklasse ganz einfach überschrieben wird (Dies ist aber nur der Fall, wenn die Signaturen der Methoden, also Name, Parameter und Rückgabewert übereinstimmen). Das heißt aber auch, dass wir aufpassen müssen, welches void info() wir aufrufen. Wenn wir nämlich in einer Memberfunktion von Employee void info() aufrufen, so wird nicht die ursprüngliche Funktion aus Person, sondern die „neue“ Implementierung aus Employee ausgeführt.

[Bearbeiten] Die Methode des Vaters aufrufen

Um eine überschriebene Methode der Basisklasse aufzurufen benutzen wir folgenden Syntax:

Crystal Clear app tutorials.png
Syntax:
«Klassenname»::«Methodenname»(«Parameter...»);
Symbol opinion vote.svg
Hinweis
Obwohl es möglich ist jede Funktion einer Basisklasse zu überschreiben, ist dies nicht empfehlenswert. Besser ist die Benutzung von virtuelle Methoden die genau zu diesem Zweck vorhanden sind.
Persönliche Werkzeuge