Genauso wie im Hauptprogramm ist es möglich auch innerhalb einer Klasse eine Methode zu überladen, also für ein und denselben Methodennamen unterschiedliche Implementierungen zu realisieren, die sich anhand der Parameterlisten unterscheiden. Der Compiler sucht dann anhand der Paramterliste bei Aufrufen die passende Methode heraus -- völlig analog zum normalen Überladen.
Werden aber in abgeleiteten Klassen Methoden definiert, die zwar den
gleichen Namen aber eine andere Parameterliste wie in der Basisklasse haben,
so wird diese Methode nicht -- wie man erst annehmen könnte -- überladen,
sondern die Methode der Basisklasse ist nicht mehr verfügbar: sie wird
verdeckt und kann nur noch über den Scope-Operator ::
angesprochen
werden.
class A { void f(int x); };class B : public A { void f(); }
B b; b.f(); // ok. B definiert eine Funktion f(void) b.f(3); // Fehler! A.f(int) ist verdeckt b.A::f(3);