FSST - Hardwarenahe Programmierung
Konstruktor und Vererbung
Die Deklaration gleichnamiger Konstruktoren und Methoden in einer Klasse oder abgeleiteten Klassen wird Überladen genannt, sofern sie sich in ihren Parametern unterscheiden:
- unterschiedliche Anzahl von Parametern
- unterschiedliche Parametertypen
- unterschiedliche Parameterart (call by value, call by reference)
NICHT im Methodentyp, d.h. im return-Typ
Weiters ist in C++ folgendes zu beachten:
Wenn von einer Klasse A eine Klasse B abgeleitet wird, erben sie in der Klasse B alle public- und protected-
Methoden der Klasse A. Ist in der Klasse A z.B. eine Methode Print mehrfach überladen,
der verschiedene Parameter übergeben werden können, stehen der Klasse B auch alle diese überladenen
Methoden zur Verfügung.
Wird eine dieser Methoden in der Klasse B überschrieben, werden alle Methoden,
also auch die überladenen Methoden, verdeckt. Um diese dennoch in der Klasse zu verwenden, können
Methoden für die Klasse wieder sichtbar gemacht werden. Dafür ist in der abgeleiteten Klassendeklaration vor den Basisklassennamen und Scope-Operatror mit Methodennamen das Schlüsselwort using zu schreiben - Ohne runde Klammern und Parameter.
class A { public: void Print(int anzahl, string r) void Print(string r); }; class B : public A { public: void Print(string nr); using A::Print; };
Beim Aufruf der Methode wird vom Compiler die richtige Variante anhand der Anzahl und der Datentypen der aktuellen Parameter ausgewählt. Wenn die Auswahl nicht eindeutig ist, meldet der Compiler einen Fehler.
Überladene Methoden dürfen sich nicht nur im Funktionstyp unterscheiden, da sich jede Funktion auch als Prozedur (Funktion ohne Rückgabewert - void) aufrufen lässt, kann der Compiler aus dem Aufruf nicht erkennen welche Funktion gemeint ist.