Co to jest przeciążenie operatora?
Przeciążenie operatora to funkcja języka programowania komputerowego, która pozwala programiście zastąpić domyślnego operatora. Gdy funkcja operatora jest przeciążona, można ją zadeklarować niestandardowymi argumentami, które są różnymi typami danych niż to, co operator był w stanie domyślnie obsłużyć. Nowe parametry mogą być typami pierwotnymi lub zdefiniowanymi przez użytkownika. W treści funkcji nadpisującej programista może dowolnie manipulować wartościami parametrów. Używając przeciążenia operatora, programista może tworzyć intuicyjne skróty do manipulowania typami danych zdefiniowanymi przez użytkownika lub modyfikować sposób obsługi domyślnych typów danych.
Podczas tworzenia typów danych zdefiniowanych przez użytkownika nie ma możliwości wykonywania prostych zadań operacyjnych, takich jak dodawanie dwóch z nich razem lub zwiększanie danych wewnętrznych za pomocą jednoargumentowego operatora przyrostu z typem danych. Operatory, w tym symbol dodawania, można przesłonić, tak że 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.
Po przeciążeniu operatora kompilator musi podjąć decyzję, co zrobić, gdy napotka przeciążonego operatora. Kompilator decyduje o podjęciu właściwego działania na podstawie typów danych używanych jako operandy lub w połączeniu z operatorem. Jeśli argumenty, 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 argumentów.
Języki komputerowe różnią się sposobem, w jaki pozwalają na tego rodzaju polimorfizm ad-hoc. Różne języki mogą zezwalać na tworzenie nowych niestandardowych operatorów, przeciążanie wszystkich lub niektórych jego operatorów, lub mogą wcale nie dopuszczać do przeciążania operatorów. C ++, C #, PHP i Perl pozwalają na przeciążenie niektórych operatorów. Przeciążenie operatora nie jest dozwolone w językach C, Java i JavaScript.
Zarówno przeciążenie operatora, jak i przeciążenie funkcji były przedmiotem debaty. Niektórzy twierdzą, że zapewnienie programiście swobody zmiany sposobu, w jaki zachowuje się operator, może wprowadzić możliwość tworzenia niezamierzonych błędów przez innych programistów, którzy używają dostosowanego 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, tańszy w produkcji i zmniejszy liczbę błędów.