Supraîncărcarea funcțiilor este o caracteristică a multor limbaje de programare în care pot fi create mai multe metode cu același nume, dar cu parametri de intrare sau tipuri de returnare diferiți. Aceasta este o caracteristică comună în programarea orientată pe obiecte; constructorii în special pot avea mai multe variante diferite supraîncărcate. În esență, supraîncărcarea funcției este utilă atunci când două funcții fac lucruri foarte similare și pot necesita mai multe tipuri de intrare pentru a face acest lucru. Constructorii pot fi supraîncărcați cu ușurință deoarece nu au un tip de returnare explicit specificat, așa că simpla modificare a parametrilor de intrare ai unui constructor ar fi o supraîncărcare validă.
Primul mod în care o funcție poate fi supraîncărcată este prin modificarea parametrilor de intrare. De exemplu, se poate lua în considerare o funcție numită „adăugați” care ia ca intrare două numere întregi. Scopul acestei funcții este destul de evident; este menit să găsească suma a două numere întregi.
Dacă s-ar dori să găsească suma a două flotoare sau numere zecimale, totuși, această funcție nu ar fi aplicabilă. Așadar, ar fi necesară o a doua funcție supraîncărcată, definită ca o funcție numită „adăugare” care ia ca intrare două flotoare. Funcțiile fac în esență același lucru, dar supraîncărcarea funcției este necesară deoarece intrările lor sunt semnificativ diferite.
Al doilea mod în care o funcție poate fi supraîncărcată este de a modifica atât parametrii de intrare, cât și tipul de returnare. Folosind exemplul anterior, se poate lua în considerare dacă ambele funcții „adăugați” supraîncărcate au avut un tip de returnare void; adică nu au returnat nimic. Aceasta ar fi încă o supraîncărcare a funcției validă, dar tipurile de returnare ale celor două metode ar putea fi, de asemenea, modificate. Într-un alt caz valid de supraîncărcare, funcția „adăugați” care ia două numere întregi ar putea returna acea sumă a numărului întreg, iar funcția „adăugați” care ia două numere zecimale ar putea returna acea sumă a numărului zecimal.
Simpla schimbare a tipului de returnare al unei funcții, totuși, nu este considerată o supraîncărcare validă a funcției. Schimbarea numai a tipului de returnare al unei funcții are ca rezultat ambiguitate, deoarece nu este clar din semnătura metodei ce tip de returnare este dorit. Parametrii pot fi, de asemenea, definiți ambiguu, așa că este foarte important ca funcțiile supraîncărcate să fie apelate corect. De exemplu, dacă una are o funcție supraîncărcată care are un număr întreg ca parametru de intrare și alta care are un număr zecimal ca parametru, ar fi foarte ușor pentru cineva să apeleze accidental funcția număr zecimal în loc de funcția număr întreg. , sau invers, pentru că au același nume. Parametrii ambigui precum aceștia ar trebui să fie evitați dacă este posibil și, dacă nu pot fi, trebuie avută mare grijă pentru a vă asigura că funcția de supraîncărcare adecvată este apelată la momentele potrivite.
Supraîncărcarea funcțiilor este utilă pentru crearea de funcții asociate cu tipuri variate de intrare și oferă codului multă flexibilitate. O ultimă considerație privind funcțiile supraîncărcate este că comentariile adecvate sunt esențiale. Deși ar putea fi clar prin diferiți parametrii de intrare ce versiune a unei funcții supraîncărcate este potrivită pentru o anumită situație, s-ar putea să nu fie întotdeauna clar ce face funcția diferit de ceilalți parteneri supraîncărcați.