Preobremenitev funkcij je značilnost številnih programskih jezikov, kjer je mogoče ustvariti več metod z istim imenom, vendar z različnimi vhodnimi parametri ali tipi vrnitev. To je pogosta značilnost objektno usmerjenega programiranja; konstruktorji imajo lahko več različnih preobremenjenih variant. V bistvu je preobremenitev funkcij uporabna, če dve funkciji počneta zelo podobne stvari in lahko za to zahtevata več vrst vnosa. Konstruktorje je mogoče zlahka preobremeniti, ker nimajo določenega izrecnega tipa vrnitve, zato bi bila preprosta sprememba vhodnih parametrov konstruktorja veljavna preobremenitev.
Prvi način, na katerega je mogoče preobremeniti funkcijo, je sprememba njenih vhodnih parametrov. Na primer, lahko razmislimo o funkciji, imenovani “add”, ki za svoj vhod vzame dve celi števili. Namen te funkcije je dokaj očiten; mišljeno je, da najdemo vsoto dveh celih števil.
Če bi želeli poiskati vsoto dveh float ali decimalnih števil, ta funkcija ne bi bila uporabna. Torej bi bila potrebna druga preobremenjena funkcija, opredeljena kot funkcija, imenovana “add”, ki za svoj vhod vzame dve float. Funkcije v bistvu opravljajo isto stvar, vendar je preobremenitev funkcij nujna, ker so njihovi vhodi bistveno različni.
Drugi način, na katerega je mogoče preobremeniti funkcijo, je sprememba njenih vhodnih parametrov in njene vrnitve. Z uporabo prejšnjega primera lahko razmislimo, ali sta obe preobremenjeni funkciji »dodaj« imeli vrnitveni tip void; to pomeni, da niso vrnili ničesar. To bi bila še vedno veljavna preobremenitev funkcije, vendar bi se lahko spremenili tudi vrnjeni tipi obeh metod. V drugem veljavnem primeru preobremenitve bi lahko funkcija »dodaj«, ki sprejme dve celi števili, vrnila to celotno vsoto števila, funkcija »dodaj«, ki sprejme dve decimalni števili, pa bi lahko vrnila to vsoto decimalnih številk.
Preprosto spreminjanje vrste vrnitve funkcije pa se ne šteje za veljavno preobremenitev funkcije. Sprememba samo vrnitve funkcije povzroči dvoumnost, ker iz podpisa metode ni jasno, kateri tip vrnitve je želen. Parametre je mogoče definirati tudi dvoumno, zato je zelo pomembno, da se preobremenjene funkcije pravilno kličejo. Na primer, če ima ena preobremenjeno funkcijo, ki ima za vhodni parameter celo število, in druga, ki ima kot parameter decimalno število, bi bilo zelo enostavno, da bi nekdo pomotoma poklical funkcijo decimalne številke namesto funkcije celega števila. , ali obratno, ker imata isto ime. Dvoumnim parametrom, kot so ti, se je treba izogniti, če je mogoče, in če jih ni mogoče, je treba paziti, da se ustrezna preobremenjena funkcija prikliče ob pravem času.
Preobremenitev funkcij je uporabna za ustvarjanje povezanih funkcij z različnimi vrstami vnosa in daje kodi veliko prilagodljivosti. Še zadnji premislek o preobremenjenih funkcijah je, da je ustrezno komentiranje bistveno. Čeprav je iz različnih vhodnih parametrov morda jasno, katera različica preobremenjene funkcije je prava za določeno situacijo, morda ni vedno jasno, kaj funkcija počne drugače kot njeni drugi preobremenjeni partnerji.