Co to jest przeciążenie operatora?

Przeciążanie operatora to funkcja języka programowania komputerowego, która umożliwia programiście zastąpienie operatora domyślnego. Gdy funkcja operatora jest przeciążona, może być zadeklarowana z niestandardowymi argumentami, które są różnymi typami danych niż te, które operator był w stanie obsłużyć domyślnie. Nowe parametry mogą być typami pierwotnymi lub zdefiniowanymi przez użytkownika. W treści funkcji nadrzędnej programista może dowolnie manipulować wartościami parametrów. Korzystając z przeciążania operatorów, programista może tworzyć intuicyjne skróty do manipulowania typami danych zdefiniowanych przez użytkownika lub modyfikować sposób obsługi domyślnych typów danych.

Po utworzeniu typów danych zdefiniowanych przez użytkownika nie ma możliwości wykonywania prostych zadań operacyjnych, takich jak dodawanie dwóch z nich lub zwiększanie danych wewnętrznych przy użyciu jednoargumentowego operatora inkrementacji z typem danych. Operatory, w tym symbol dodawania, można zastąpić, aby jeśli są używane jako operatory binarne między dwoma niestandardowymi typami danych, zwracają wynik zdefiniowany przez użytkownika. W ten sam sposób operator jednoargumentowy, taki jak operator inkrementacji, może zostać zastąpiony w celu zwiększenia wartości wewnętrznej w typie zdefiniowanym przez użytkownika.

Gdy operator jest przeciążony, kompilator musi podjąć decyzję, co zrobić, gdy napotka przeciążony operator. Kompilator decyduje o właściwym działaniu, które należy podjąć na podstawie tego, jakie typy danych są używane jako operandy lub w połączeniu z operatorem. Jeśli operandy, które są wartościami parametrów funkcji operatora, są typami danych zdefiniowanymi przez użytkownika, kompilator wybierze przeciążoną funkcję, która ma parametry pasujące do używanych operandów.

Języki komputerowe różnią się sposobem, w jaki pozwalają na ten rodzaj polimorfizmu ad hoc. Różne języki mogą umożliwiać tworzenie nowych operatorów niestandardowych, przeciążanie wszystkich lub niektórych operatorów lub w ogóle nie zezwalać na przeciążanie operatorów. C++, C#, PHP i Perl pozwalają na przeciążenie niektórych operatorów. Przeciążanie operatorów nie jest dozwolone w językach C, Java i JavaScript.

Zarówno przeciążanie operatorów, jak i ogólnie przeciążanie funkcji były przedmiotem pewnej debaty. Niektórzy twierdzą, że danie programiście swobody w zmianie sposobu zachowania operatora może stwarzać możliwość tworzenia niezamierzonych błędów przez innych programistów korzystających z niestandardowego kodu. Przeciwny punkt widzenia sugeruje, że umożliwienie przeciążenia operatora daje programistom możliwość tworzenia intuicyjnego i zwięzłego kodu, który będzie łatwiejszy do zrozumienia, mniej kosztowny w produkcji i zmniejszony błędów.