Przeciążenie operatorów


Obraz 3.26. Zastosowanie przeciążonego operatora dodawania



Pobieranie 127,7 Kb.
Strona3/4
Data12.01.2018
Rozmiar127,7 Kb.
1   2   3   4

Obraz 3.26. Zastosowanie przeciążonego operatora dodawania





Użycie przeciążonego operatora dodawania pozwala na formalny zapis typu :
g_nowa = g1 + g2;
Argumentami operatora dodawania są obiekty klasy grupa, zaś sama operacja dodawania oznacza, zgodnie z definicją operatora, wyznaczenie sumy wartości zmiennych wewnętrznych obu operandów i utworzenie obiektu charakteryzującego się określoną przez tę sumę liczbą osób.
Definicje przeciążonego operatora + i funkcji Dodaj_osoby() są prawie identyczne, jednak składnia zastosowania obu tych elementów w programie jest różna.
g_nowa = g1.Dodaj_osoby(g2);
g_nowa = g1 + g2;
Przeciążając operatory należy pamiętać, iż można tego dokonać wyłącznie dla operatorów wbudowanych w składnie języka C++. Nie można zmieniać kolejności wykonywanych działań, ani argumentów operatora. Niemożliwe jest również tworzenie nowych operatorów, nie mających swojej implementacji w składni języka C++.



      1. Operator przypisania.

Operator przypisania, oznaczany symbolem : = , wykonuje swoje funkcje automatycznie w sposób określony przez kompilator.


Dla dwóch obiektów : obiekt1 i obiekt2 utworzonych za pomocą konstruktora klasy, przypisanie jako operacja wykonywana z wykorzystaniem operatora dwuargumentowego :

obiekt1 = obiekt2;

powoduje iż w pierwszej kolejności zwalniana jest pamięć dla operandu lewostronnego, po czym w procesie kopiowania wykonywana jest kopia operandu prawostronnego.

Ponieważ zwolnienie obszaru pamięci zajmowanego przez operand lewostronny jest pierwszym krokiem operacji przypisania, zatem groźne staje się przypisanie, w sytuacji gdy operand prawostronny jest identyczny jak lewostronny.

obiekt1 = obiekt1;

Jeżeli programista nie przewidzi takiej sytuacji, to obiekt obiekt1 sam skasuje się z pamięci, i gdy będzie już gotowy do przypisania, okaże się że pamięć która go zawierała została już zwolniona.

W sytuacji gdy mamy do czynienia z obiektami zadeklarowanymi na stosie, proces tworzenia kopii operandu prawostronnego przebiega zazwyczaj bez żadnych problemów. W przypadku jednak gdy obiekty, bądź zmienne wewnętrzne tworzone są na stercie, to w przypadku tzw. kopiowania płytkiego oba operandy (prawo i lewostronny) po wykonaniu operacji podstawienia wskazywać będą na te same obszary na stercie. Jak wiadomo z poprzednich rozdziałów, należy w takiej sytuacji przeprowadzić tzw. kopiowanie głębokie. Wymaga ono zdefiniowania operatora przypisania. Definicja operatora przypisania powinna sprawdzać czy nie następuje przypisanie obiektu do samego siebie.

Aby przedstawić definicje przeciążonego operatora przypisania zbudujemy przykład w którym zmienne wewnętrzne są wskaźnikami do danych na stercie. Korzystając ze zdefiniowanej w poprzednich rozdziałach klasy prostokat, wykorzystamy plik nagłówkowy prostokat.h, w którym zdefiniowano konstruktor, destruktor i konstruktor kopiujący. Wszystkie te metody klasy zostały utworzone w celu prawidłowego działania programu, w sytuacji gdy zmiennymi wewnętrznymi klasy są wskaźniki do danych na stercie.



Modyfikując definicje klasy prostokat dopisano do niej deklaracje i definicje przeciążonego operatora przypisania.


  • plik nagłówkowy prostokat.h




: pliki -> start -> Artur%20%20Bojara%20Programowanie%20w%20Visual%20C
Artur%20%20Bojara%20Programowanie%20w%20Visual%20C -> Poznawaniu zasad programowania I struktury języka C++, towarzyszyć będzie w niniejszej książce narzędzie programistyczne w postaci aplikacji firmy Microsoft – Visual C++ V
Artur%20%20Bojara%20Programowanie%20w%20Visual%20C -> Poznawaniu zasad programowania I struktury języka C++, towarzyszyć będzie w niniejszej książce narzędzie programistyczne w postaci aplikacji firmy Microsoft – Visual C++ V
Artur%20%20Bojara%20Programowanie%20w%20Visual%20C -> Przeciążenie operatorów
Artur%20%20Bojara%20Programowanie%20w%20Visual%20C -> Aplikacje obsługujące bazy danych
Artur%20%20Bojara%20Programowanie%20w%20Visual%20C -> Kontrolki paska narzędziowego – Controls I ich rozmieszczanie w polu okna
Artur%20%20Bojara%20Programowanie%20w%20Visual%20C -> Poznawaniu zasad programowania I struktury języka C++, towarzyszyć będzie w niniejszej książce narzędzie programistyczne w postaci aplikacji firmy Microsoft – Visual C++ V
Artur%20%20Bojara%20Programowanie%20w%20Visual%20C -> Poznawaniu zasad programowania I struktury języka C++, towarzyszyć będzie w niniejszej książce narzędzie programistyczne w postaci aplikacji firmy Microsoft – Visual C++ V
start -> Ptsd u żołnierzy
Artur%20%20Bojara%20Programowanie%20w%20Visual%20C -> Poznawaniu zasad programowania I struktury języka C++, towarzyszyć będzie w niniejszej książce narzędzie programistyczne w postaci aplikacji firmy Microsoft – Visual C++ V
Artur%20%20Bojara%20Programowanie%20w%20Visual%20C -> Poznawaniu zasad programowania I struktury języka C++, towarzyszyć będzie w niniejszej książce narzędzie programistyczne w postaci aplikacji firmy Microsoft – Visual C++ V


1   2   3   4


©operacji.org 2019
wyślij wiadomość

    Strona główna