Co je přetížení operátora?
Přetížení operátora je funkce programovacího jazyka počítače, která umožňuje programátorovi přepsat výchozího operátora. Když je funkce operátora přetížena, může být deklarována s vlastními argumenty, které jsou odlišnými datovými typy, než jaké operátor ve výchozím stavu dokázal zpracovat. Nové parametry mohou být primitivní nebo uživatelem definované typy. V těle nadřazené funkce může programátor podle potřeby manipulovat s hodnotami parametrů. Pomocí přetížení operátorem může programátor vytvářet intuitivní zkratky pro manipulaci s uživatelsky definovanými datovými typy nebo upravovat způsob, jakým jsou zpracovávány výchozí datové typy.
Při vytváření uživatelsky definovaných datových typů neexistuje žádný způsob, jak provádět jednoduché operační úkoly, jako je například přidání dvou z nich dohromady nebo zvýšení interních dat pomocí operátoru unary increment s datovým typem. Operátory, včetně symbolu sčítání, mohou být přepsány tak, že pokud jsou použity jako binární operátory mezi dvěma vlastními datovými typy, vracejí výsledek definovaný uživatelem. Stejným způsobem může být přepsán unární operátor, jako operátor inkrementace, aby se zvýšila interní hodnota uvnitř uživatelem definovaného typu.
Jakmile je operátor přetížen, kompilátor se musí rozhodnout, co dělat, když narazí na přetíženého operátora. Kompilátor rozhodne o správné akci, která má být provedena na základě toho, jaké datové typy se používají jako operandy nebo ve spojení s operátorem. Pokud jsou operandy, které jsou hodnotami parametrů pro operátorovou funkci, uživatelem definované datové typy, kompilátor vybere přetíženou funkci, která má parametry odpovídající použitým operandům.
Počítačové jazyky se liší v tom, jak umožňují tento typ ad-hoc polymorfismu. Různé jazyky mohou umožnit vytváření nových vlastních operátorů, přetížení všech nebo některých jejích operátorů, nebo nemusí vůbec dovolit přetížení operátorů. C ++, C #, PHP a Perl všechny umožňují přetížení některých jejich operátorů. Přetížení operátora není povoleno v jazycích C, Java a Javascript.
Jak přetížení operátorů, tak přetížení funkcí obecně byly předmětem nějaké debaty. Někteří tvrdí, že poskytnutí svobody při změně způsobu chování operátora by mohlo představovat potenciál pro vytváření neúmyslných chyb jinými programátory, kteří používají přizpůsobený kód. Protichůdné hledisko navrhuje, že umožnění přetížení operátorem dává programátorům možnost vytvářet intuitivní a stručné kódy, které budou snáze srozumitelné, méně nákladné na výrobu a snižují chyby.