Coding Gods - Bogowie kodowania: [Tut] Przeciążanie operatorów - Coding Gods - Bogowie kodowania

Skocz do zawartości

Pokaż wiadomość Ukryj wiadomość
Witaj na Coding Gods - Bogowie kodowania!

Chcesz programować cheaty/boty? Dołącz do nas!
Chcesz zarobić na cheatach/botach? Dowiedz się więcej!

Strona 1 z 1
  • Nie możesz napisać tematu
  • Nie możesz odpowiedzieć

[Tut] Przeciążanie operatorów Na czym polega?

#1 Użytkownik nie jest zalogowany   PsychoBoy 

  • Tip Top
  • Grupa: God
  • Postów 1008
  • Rejestracja: 17-December 10
  • LokalizacjaUnknown

Napisano 18 December 2010 - 02:07

Tytuł: Przeciążanie operatorów
Status: Poradnik ukończony

Źródło:
Myślenie obiektowe w programowaniu - Matt Weisfeld


-------------------------------------------------------------------------------------------------------------------------------------------

W niektórych obiektowych językach programowania możliwe jest przeciążanie operatorów. Należy do nich na przykład C++. Technika ta umożliwa zmianę domyślnego działania operatora. Na przykład prawie zawsze znak + oznacza dodawanie. Widząc równanie:

Ta treść jest ukryta dla gości. Proszę się zalogować lub zarejestrować.


każdy zakłada, że po jego obliczeniu x będzie zawierać wartość 11. Oczywiście jest to prawdą.
Jednak zdarzają się sytuacje, w których znak ten ma nieco inne znaczenie. Na przykład w poniższym fragmencie kodu:

Ta treść jest ukryta dla gości. Proszę się zalogować lub zarejestrować.


należy oczekiwać, że zmienna Name będzie zawierać łańcuch Marcel Bułkowski. Tutaj znak + został przeciążony, aby wykonywał konkatenację (łączenie) łańcuchów.

Konkatenacja łańcuchów
Konkatenacja łańcuchów to operacja polegająca na połączeniu dwóch osobnych łańcuchów w jeden


W kontekście łańcuchów znak + nie oznacza dodawania liczb, lecz łączenie.
Jak zatem wyglądałoby dodawanie macierzy (tablicy danych)? Można napisać następujący kod:

Ta treść jest ukryta dla gości. Proszę się zalogować lub zarejestrować.


Tutaj znak + oznacza dodawanie macierzy, a nie liczb. Przeciążanie to technika dająca niezwykle duże możliwości. Jej zastosowanie może jednak wprowadzić w błąd osoby czytające napisany nie przez siebie kod. W zasadzie programista może nawet sam siebie złapać w pułapkę. Zilustruję to na przypadku ekstremalnym. Możliwe jest takie zmodyfikowanie operatora dodawania, żeby wykonywał odejmowanie. Czemu nie? Przecież przeciążanie operatorów to właśnie technika, która do tego służy. Gdyby to zrobiono, poniższa instrukcja zwróciłaby wartość -1:

Ta treść jest ukryta dla gości. Proszę się zalogować lub zarejestrować.


Nowe obiektowe języki programowania, takie jak Java i te, które wchodzą w skład platformy .NET, nie umożliwiają przeciążania operatorów. Mimo tego operator dodawania jest w nich przeciążony, aby w przypadku łańcuchów wykonywał łączenie zamiast dodawania. Ale to tylko tyle. Projektanci Javy musieli dojść do wniosku, że przeciążanie operatorów sprawia więcej kłopotów, niż jest warte. Jeśli nie da się uniknąć przeciążania operatorów w języku C++, należy za pomocą odpowiedniej dokumentacji i właściwych komentarzy zadbać o to, aby nie zmylić innych programistów.
Dołączona grafika
3

#2 Użytkownik nie jest zalogowany   White Rabbit 

  • Pro User II
  • Grupa: Regular User
  • Postów 298
  • Rejestracja: 16-January 11
  • GG:22271102

Napisano 28 October 2011 - 20:47

Pozwolę sobie na drobny refresh ale może kogoś zaciekawi że w C też istnieje konkatenacja.
Jest ona co prawda dosyć uboga i wygląda mniej więcej tak :)
Ta treść jest ukryta dla gości. Proszę się zalogować lub zarejestrować.

Wiem że ubogo ale zawsze może sie przydać jakby ktoś nie wiedział...
W sowieckiej Rosji klasa niszczy destruktor!

Cytat

You had ones? Lucky bastard! All we got were zeros. -Joel Spolsky

0

#3 Użytkownik nie jest zalogowany   PsychoBoy 

  • Tip Top
  • Grupa: God
  • Postów 1008
  • Rejestracja: 17-December 10
  • LokalizacjaUnknown

Napisano 29 October 2011 - 02:05

Najgorsze jest to, że Java / języki .NET nie mają możliwości przeciążania operatorów (mowa o klasach) a to ma (przynajmniej dla mnie) ogromną funkcjonalność.
No ale skoro już są wbudowane takie rzeczy jak porównywanie struktur to nie jest najgorzej..
Dołączona grafika
0

Strona 1 z 1
  • Nie możesz napisać tematu
  • Nie możesz odpowiedzieć

Użytkownicy przeglądający ten temat: 1
0 użytkowników, 1 gości, 0 anonimowych


Podaj swój login i hasło


Opcje logowania
  Lub za pomocą tych serwisów