+ Obsługa przeciążania i definiowania nowych operatorów w językach programowania Przeciążanie idefiniowanie Przeciążanie Brak Fortran Haskell PostgreSQL Prolog R Smalltalk SMLMożna deklarować nowe operatory. Nie można przeciążać operatorów. Istnieje kilka domyślnie przeciążonych, ale zdefiniowanie takiej funkcji anuluje przeciążone definicje. Ada C++ C# D Kotlin Object Pascal Perl Pico Python Ruby C ECMAScriptImplementacje ActionScript oraz JavaScript. Rozważane jest wprowadzenie przeciążania w czwartej wersji specyfikacji standardu. JavaPrzeciążony jest jedynie operator + dla klasy String. Modula-3 Ocaml Pascal PHPStandardowa dystrybucja; dostępny jest udostępniający tę możliwość oficjalny moduł. Visual Basic Przeciążanie operatorów () lub przeładowanie operatorów – rodzaj polimorfizmu występującego w niektórych językach programowania, polegający na tym, że operator może mieć różne implementacje w zależności od typów użytych argumentów (operandów).

Przeciążanie operatorów to typowy lukier składniowy. Potencjalnie znacznie poprawia czytelność kodu i umożliwia zdefiniowanie większej części biblioteki standardowej na poziomie języka, bez uciekania się do trików. Z drugiej strony, ta technika programistyczna może spowodować powstawanie niejasnych konstrukcji, gdzie operatory wykonują kompletnie różne czynności w zależności od ich operandów.

Na przykład wyrażenie w C++: a << 1 normalnie oznacza przesunięcie bitowe liczby w lewo. Jeśli jest strumieniem, oznacza to przesłanie liczby 1 do tego strumienia. Jak jednak interpretować ten fragment gdy jest oknem? Z tego powodu zalecane jest, aby przeciążać tylko te operatory, których znaczenia łatwo się domyślić, gdyż mają swój odpowiednik w matematyce, fizyce itp.

Problem nazwy Inny sposób nazewnictwa – objaśnienia z książki „Symfonia C++ Standard”:

Przeciążanie operatorów we Free Pascalu W kompilatorze Free Pascal można przeciążać operatory w następujący sposób:

operator +(A, B: TMojaKlasa) R: TMojaKlasa; Begin // R od Result R := (A.Wartosc1 + B.Wartosc1) + (A.Wartosc2 + B.Wartosc2); // Wzięte w nawiasy ze względów estetycznych. End;

Uwagi

Przypisy

Kategoria:Konstrukcje programistyczne