Kas yra operatoriaus perkrova?

Operatoriaus perkrova yra kompiuterio programavimo kalbos funkcija, leidžianti programuotojui nepaisyti numatytojo operatoriaus. Kai operatoriaus funkcija perkrauta, ji gali būti deklaruojama naudojant pasirinktinius argumentus, kurie skiriasi nuo duomenų tipų, kuriuos operatorius galėjo apdoroti pagal numatytuosius nustatymus. Nauji parametrai gali būti primityvūs arba vartotojo apibrėžti. Nepaisančios funkcijos turinyje programuotojas gali manipuliuoti parametrų reikšmėmis, kaip pageidaujama. Naudodamas operatoriaus perkrovą, programuotojas gali sukurti intuityvius sparčiuosius klavišus, skirtus manipuliuoti vartotojo apibrėžtais duomenų tipais arba modifikuoti, kaip tvarkomi numatytieji duomenų tipai.

Kai sukuriami vartotojo apibrėžti duomenų tipai, nėra galimybės atlikti paprastų operatyvinių užduočių, pvz., sudėti du iš jų arba padidinti vidinius duomenis naudojant vienkartinį prieaugio operatorių su duomenų tipu. Operatoriai, įskaitant pridėjimo simbolį, gali būti nepaisyti, kad jei jie būtų naudojami kaip dvejetainiai operatoriai tarp dviejų pasirinktinių duomenų tipų, jie grąžintų vartotojo apibrėžtą rezultatą. Lygiai taip pat unarinis operatorius, kaip ir didinimo operatorius, gali būti nepaisomas, siekiant padidinti vidinę vartotojo apibrėžto tipo reikšmę.

Kai operatorius yra perkrautas, kompiliatorius turi priimti sprendimą, ką daryti, kai susiduria su perkrautu operatoriumi. Kompiliatorius nusprendžia, kokių veiksmų reikia imtis, atsižvelgdamas į tai, kokie duomenų tipai naudojami kaip operandai arba kartu su operatoriumi. Jei operandai, kurie yra operatoriaus funkcijos parametrų reikšmės, yra vartotojo apibrėžti duomenų tipai, kompiliatorius pasirinks perkrautą funkciją, kurios parametrai atitinka naudojamus operandus.

Kompiuterių kalbos skiriasi tuo, kaip jos leidžia tokio tipo ad hoc polimorfizmą. Skirtingos kalbos gali leisti sukurti naujus pasirinktinius operatorius, perkrauti visus ar kai kuriuos operatorius arba neleisti perkrauti operatorių. C++, C#, PHP ir Perl leidžia perkrauti kai kuriuos jų operatorius. Operatoriaus perkrovimas neleidžiamas C, Java ir Javascript.

Tiek operatoriaus perkrova, tiek funkcijų perkrova apskritai buvo diskusijų objektas. Kai kurie teigia, kad suteikiant programuotojui laisvę keisti operatoriaus elgesį, kiti programuotojai, naudojantys pritaikytą kodą, gali sukelti netyčinių klaidų. Priešingas požiūris siūlo, kad operatoriaus perkrovimas suteikia programuotojams galimybę sukurti intuityvų ir glaustą kodą, kuris bus lengviau suprantamas, kainuoja mažiau ir sumažins klaidų skaičių.