Mis on operaatori ülekoormus?

Operaatori ülekoormus on arvuti programmeerimiskeele funktsioon, mis võimaldab programmeerijal vaikeoperaatorit alistada. Kui operaatori funktsioon on ülekoormatud, võidakse see deklareerida kohandatud argumentidega, mis on erinevad andmetüübid kui need, mida operaator suutis vaikimisi käsitleda. Uued parameetrid võivad olla primitiivsed või kasutaja määratud tüüpi. Alusfunktsiooni põhiosas võib programmeerija parameetrite väärtusi vastavalt soovile manipuleerida. Kasutades operaatori ülekoormust, saab programmeerija luua intuitiivseid otseteid kasutaja määratletud andmetüüpidega manipuleerimiseks või muuta vaikeandmete tüüpide käsitlemist.

Kasutaja määratletud andmetüüpide loomisel ei ole võimalik teha lihtsaid operatiivtoiminguid, nagu näiteks kahe neist kokku liitmine või sisemiste andmete suurendamine, kasutades andmetüübiga ühekordset juurdekasvuoperaatorit. Operaatoreid, sealhulgas liitmissümbolit, saab tühistada, nii et kui neid kasutatakse kahe kohandatud andmetüübi vahelise binaaroperaatorina, tagastavad nad kasutaja määratud tulemuse. Samamoodi võib unaarset operaatorit, nagu ka juurdekasvutehet, tühistada, et suurendada kasutaja määratud tüübi sisemist väärtust.

Kui operaator on ülekoormatud, peab kompilaator tegema otsuse, mida teha, kui ta kohtab ülekoormatud operaatorit. Kompilaator otsustab, milliseid andmetüüpe operandidena kasutatakse või koos operaatoriga. Kui operandid, mis on operaatorifunktsiooni parameetrite väärtused, on kasutaja määratud andmetüübid, valib kompilaator ülekoormatud funktsiooni, mille parameetrid vastavad kasutatavatele operandidele.

Arvutikeeled erinevad selle poolest, kuidas nad seda tüüpi ad hoc polümorfismi võimaldavad. Erinevad keeled võivad lubada uute kohandatud operaatorite loomist, kõigi või osade operaatorite ülekoormamist või ei pruugi lubada operaatori ülekoormamist üldse. C++, C#, PHP ja Perl võimaldavad kõik operaatorid üle koormata. Operaatori ülekoormamine pole C, Java ja Javascripti puhul lubatud.

Nii operaatori ülekoormus kui ka funktsioonide ülekoormus üldiselt on olnud arutelu objektiks. Mõned väidavad, et andes programmeerijale vabaduse muuta operaatori käitumist, võivad teised kohandatud koodi kasutavad programmeerijad tekitada tahtmatuid vigu. Vastupidine seisukoht pakub, et operaatori ülekoormuse lubamine annab programmeerijatele võimaluse luua intuitiivset ja sisutihedat koodi, mida on lihtsam mõista, mille tootmine on odavam ja vigade arv väheneb.