Junior
Wat zijn methodenoverbelasting en -overschrijving in C++?
sobes.tech AI
Antwoord van AI
Method Overloading (Method Overloading):
- Maakt het mogelijk om meerdere methoden met dezelfde naam in één klasse te hebben.
- Ze verschillen in handtekening (aantal en/of types van parameters).
- Het geretourde type neemt niet deel aan de definitie van de handtekening voor overbelasting.
- De keuze voor een specifieke methode wordt door de compiler bepaald op basis van de argumenttypes tijdens de aanroep (statische binding).
class MyClass {
public:
void print(int a) {
// Afdrukken van een geheel getal
}
void print(double d) {
// Afdrukken van een drijvend-kommagetal
}
void print(int a, int b) {
// Afdrukken van twee gehele getallen
}
};
Method Overriding (Method Overriding):
- Maakt het mogelijk voor een afgeleide klasse om een specifieke implementatie van een methode te bieden die al in de basisklasse is gedefinieerd.
- De methode in de afgeleide klasse moet dezelfde handtekening hebben (naam, aantal en types van parameters) en hetzelfde geretourde type (of een covariante geretourde type).
- Wordt gebruikt met virtuele functies (
virtual) om polymorfisme te implementeren. - De keuze voor de concrete implementatie van de methode wordt tijdens de uitvoering bepaald (dynamische binding), afhankelijk van het werkelijke type van het object.
class Base {
public:
virtual void display() {
// Implementatie in de basisklasse
}
};
class Derived : public Base {
public:
void display() override { // Het sleutelwoord override (vanaf C++11) helpt fouten te voorkomen
// Specifieke implementatie in de afgeleide klasse
}
};
Belangrijkste verschillen:
| Kenmerk | Method Overloading | Method Overriding |
|---|---|---|
| Toepassingsplaats | In één klasse | In basisklassen en afgeleide klassen |
| Methodenaam | Zelfde | Zelfde |
| Handtekening methode | Verschillend | Zelfde |
| Mechanisme keuze | Statische binding (compileertijd) | Dynamische binding (uitvoering) |
| Gebruikt met | Normale functies | Virtuele functies |
| Doel | Verschillende acties voor verschillende types | Specifieke implementatie in erfenis |