Wat is functieoverbelasting?
Functieoverbelasting is een functie van veel programmeertalen waarbij meerdere methoden kunnen worden gemaakt met dezelfde naam maar met verschillende invoerparameters of retourtypen. Dit is een veel voorkomend kenmerk in objectgeoriënteerd programmeren; in het bijzonder constructeurs kunnen meerdere verschillende overbelaste varianten hebben. In essentie is functieoverbelasting handig wanneer twee functies zeer vergelijkbare dingen doen en hiervoor meerdere soorten invoer nodig kunnen hebben. Constructors kunnen gemakkelijk worden overbelast omdat er geen expliciet retourtype is opgegeven, dus het eenvoudig wijzigen van de invoerparameters van een constructor zou een geldige overbelasting zijn.
De eerste manier waarop een functie kan worden overbelast, is door de invoerparameters te wijzigen. Men kan bijvoorbeeld een functie overwegen die "add" wordt genoemd en die twee gehele getallen als invoer heeft. Het doel van deze functie is vrij duidelijk; het is bedoeld om de som van twee hele getallen te vinden.
Als je de som van twee drijvers of decimale getallen wilt vinden, is deze functie echter niet van toepassing. Dus zou een tweede overbelaste functie nodig zijn, gedefinieerd als een functie genaamd "add" die als invoer twee drijvers neemt. De functies doen in wezen hetzelfde, maar functieoverbelasting is noodzakelijk omdat hun invoer aanzienlijk verschilt.
De tweede manier waarop een functie kan worden overbelast, is door zowel de invoerparameters als het retourtype te wijzigen. Met het vorige voorbeeld kan worden overwogen of beide overbelaste "add" -functies een ongeldig retourtype hadden; dat wil zeggen, ze hebben niets teruggegeven. Dit zou nog steeds een geldige functie-overbelasting zijn, maar de retourtypen van de twee methoden kunnen ook worden gewijzigd. In een ander geldig geval van overbelasting kan de "add" -functie die twee hele getallen gebruikt, die som van het hele getal retourneren, en de "add" -functie die twee decimale getallen gebruikt, kan die decimale getalsom teruggeven.
Het eenvoudig wijzigen van het retourtype van een functie wordt echter niet als geldige functieoverbelasting beschouwd. Het wijzigen van alleen het retourtype van een functie leidt tot dubbelzinnigheid, omdat uit de methodehandtekening niet duidelijk is welk retourtype gewenst is. Parameters kunnen ook dubbelzinnig worden gedefinieerd, dus het is erg belangrijk dat overbelaste functies correct worden aangeroepen. Als iemand bijvoorbeeld een overbelaste functie heeft met een heel nummer als invoerparameter, en een ander met een decimaal nummer als parameter, zou het voor iemand heel gemakkelijk zijn om per ongeluk de functie voor het decimale nummer te bellen in plaats van de functie voor het hele nummer , of vice versa, omdat ze dezelfde naam hebben. Dubbelzinnige parameters zoals deze moeten indien mogelijk worden vermeden, en als ze dat niet kunnen, moet u er goed op letten dat de juiste overbelaste functie op de juiste tijden wordt opgeroepen.
Overbelasting van functies is handig voor het maken van gerelateerde functies met verschillende invoertypen en biedt code veel flexibiliteit. Een laatste overweging bij overbelaste functies is dat voldoende commentaar essentieel is. Hoewel het misschien door verschillende invoerparameters duidelijk is welke versie van een overbelaste functie geschikt is voor een bepaalde situatie, is het misschien niet altijd duidelijk wat de functie anders doet dan zijn andere overbelaste partners.