Funkcijų perkrovimas yra daugelio programavimo kalbų savybė, kai galima sukurti kelis metodus tuo pačiu pavadinimu, bet skirtingais įvesties parametrais arba grąžinimo tipais. Tai įprastas objektinio programavimo bruožas; ypač konstruktoriai gali turėti kelis skirtingus perkrautus variantus. Iš esmės funkcijų perkrovimas yra naudingas, kai dvi funkcijos atlieka labai panašius dalykus ir gali prireikti kelių tipų įvesties. Konstruktoriai gali būti lengvai perkrauti, nes jie nenurodo aiškaus grąžinimo tipo, todėl paprasčiausiai pakeitus konstruktoriaus įvesties parametrus būtų galima perkrauti.
Pirmasis būdas perkrauti funkciją yra pakeisti jos įvesties parametrus. Pavyzdžiui, galima apsvarstyti funkciją, vadinamą „pridėti“, kurios įvestis yra du sveikieji skaičiai. Šios funkcijos tikslas yra gana akivaizdus; ji skirta rasti dviejų sveikųjų skaičių sumą.
Tačiau jei norėtųsi rasti dviejų slankiųjų skaičių arba dešimtainių skaičių sumą, ši funkcija nebūtų taikoma. Taigi, reikės antrosios perkrautos funkcijos, apibrėžtos kaip funkcija „pridėti“, kurios įvestis yra dvi plūdės. Funkcijos iš esmės atlieka tą patį, tačiau būtinas funkcijų perkrovimas, nes jų įvestis labai skiriasi.
Antrasis būdas, kuriuo funkcija gali būti perkrauta, yra pakeisti jos įvesties parametrus ir grąžinimo tipą. Naudojant ankstesnį pavyzdį, galima apsvarstyti, ar abi perkrautos „pridėti“ funkcijos turėjo galiojantį grąžinimo tipą; tai jie nieko negrąžino. Tai vis tiek būtų tinkama funkcijų perkrova, tačiau abiejų metodų grąžinimo tipai taip pat gali būti pakeisti. Kitu tinkamu perkrovimo atveju funkcija „pridėti“, kuri paima du sveikus skaičius, gali grąžinti tą sveikųjų skaičių sumą, o funkcija „pridėti“, kuri paima du dešimtainius skaičius, gali grąžinti tą dešimtainio skaičiaus sumą.
Tačiau paprasčiausias funkcijos grąžinimo tipo pakeitimas nėra laikomas tinkamu funkcijos perkrovimu. Pakeitus tik funkcijos grąžinimo tipą, atsiranda dviprasmybių, nes iš metodo parašo neaišku, kokio grąžinimo tipo reikia. Parametrai taip pat gali būti apibrėžti dviprasmiškai, todėl labai svarbu, kad perkrautos funkcijos būtų tinkamai iškviestos. Pavyzdžiui, jei vienoje yra perkrauta funkcija, kurios įvesties parametras yra sveikas skaičius, o kitos, kurios parametras yra dešimtainis skaičius, būtų labai lengva netyčia iškviesti dešimtainio skaičiaus funkciją, o ne sveikojo skaičiaus funkciją. , arba atvirkščiai, nes jie turi tą patį pavadinimą. Jei įmanoma, reikėtų vengti tokių dviprasmiškų parametrų, kaip šie, o jei jų negali būti, reikia labai atsargiai užtikrinti, kad tinkama perkrauta funkcija būtų iškviesta tinkamu laiku.
Funkcijų perkrovimas yra naudingas kuriant susijusias funkcijas su įvairiais įvesties tipais ir suteikia kodui daug lankstumo. Paskutinis aspektas, susijęs su perkrautomis funkcijomis, yra tai, kad būtina tinkamai komentuoti. Nors dėl skirtingų įvesties parametrų gali būti aišku, kokia perkrautos funkcijos versija yra tinkama konkrečiai situacijai, ne visada gali būti aišku, ką funkcija veikia kitaip nei kiti perkrauti partneriai.