Poznaj C++ w$ godziny0218

Poznaj C++ w$ godziny0218



Przeciążanie operatorów 209

23:    {}

24:

25:    Licznik::Licznik(int wartość):

26:    jegoWartosc(wartość)

27:    {)

28:

29:    Licznik::operator int ()

30:    {

31:    return ( jegoWartosc );

32:    )

33:

34:    int main()

35:    {

36:    Licznik licz (5);

37:    int zlnt = licz;

38:    cout « "zlnt: " « zlnt « endl;

39:    return 0;

40:    }

EFEKT DZIAŁANIA:

zlnt: 5

ANALIZA:


W linii 15 zadeklarowany został operator konwersji. Zauważ, że nie ma on określonego typu wartości zwracanej. Implementacja operatora znajduje się w liniach 29-32. Linia 31 zwraca wartość zmiennej jegoWartosc.

Teraz kompilator wie, jak ma zamieniać wartość int na Licznik i Licznik na int. Zmienne obydwu typów można teraz dowolnie do siebie przypisywać.

Podsumowanie

W ciągu tej godziny omówiliśmy przeciążanie operatorów.

Konstruktor kopiujący i operator = są dostarczane przez kompilator (jeśli nie stworzysz swoich) ale kopiują one tylko zawartość wszystkich zmiennych wewnętrznych. Jeśli klasa zawiera wskaźniki do obszarów na stercie, to metody dostarczone przez kompilator trzeba zastąpić swoimi, kopiującymi również obszary wskazywane przez wskaźniki zawarte w klasie.

Większość operatorów C++ może zostać przeciążona. Nie można jednak zmieniać arności operatorów ani tworzyć nowych operatorów.

Wskaźnik this wskazuje na aktualny obiekt i jest „niewidocznym” parametrem wszystkich wewnętrznych funkcji klasy. Jest on bardzo często wykorzystywany przy przeciążaniu operatorów do zwrócenia aktualnego obiektu przez wartość.

Operatory konwersji pozwalają na wykorzystanie stworzonej klasy w wyrażeniach wymagających innych typów danych niż dana klasa. Stanowią one wyjątek od reguły, że każda funkcja musi mieć jawnie określony typ zwracanej wartości. Podobnie jak w przypadku konstruktorów i destruktorów, również w przypadku operatorów konwersji nie określa się typu wartości zwracanej.

23:    {)

24:

25:    Licznik::Licznik(int wartość):

26:    jegoWartosc(wartość)

27:    {)

28:

29:    Licznik::operator int ()

30:    {

31:    return ( jegoWartosc );

32:    >

33:

34 :    int main ()

35:    (

36:    Licznik licz(5);

37:    int zlnt = licz;

38:    cout « "zlnt: " « zlnt « endl;

39:    return 0;

40:    )

EFEKT DZIAŁANIA:

zlnt: 5

ANALIZA:


W linii 15 zadeklarowany został operator konwersji. Zauważ, że nie ma on określonego typu wartości zwracanej. Implementacja operatora znajduje się w liniach 29-32. Linia 31 zwraca wartość zmiennej jegoWartosc.

Teraz kompilator wie, jak ma zamieniać wartość int na Licznik i Licznik na int. Zmienne obydwu typów można teraz dowolnie do siebie przypisywać.

Podsumowanie

W ciągu tej godziny omówiliśmy przeciążanie operatorów.

Konstruktor kopiujący i operator = są dostarczane przez kompilator (jeśli nie stworzysz swoich) ale kopiują one tylko zawartość wszystkich zmiennych wewnętrznych. Jeśli klasa zawiera wskaźniki do obszarów na stercie, to metody dostarczone przez kompilator trzeba zastąpić swoimi, kopiującymi również obszary wskazywane przez svskaźniki zawarte w klasie.

Większość operatorów C++ może zostać przeciążona. Nie można jednak zmieniać arności operatorów ani tworzyć nowych operatorów.

Wskaźnik thia wskazuje na aktualny obiekt i jest „niewidocznym" parametrem wszystkich wewnętrznych funkcji klasy. Jest on bardzo często wykorzystywany przy przeciążaniu operatorów do zwrócenia aktualnego obiektu przez wartość.

Operatory konwersji pozwalają na wykorzystanie stworzonej klasy w wyrażeniach wymagających innych typów danych niż dana klasa. Stanowią one wyjątek od reguły, że każda funkcja musi mieć jawnie określony typ zwracanej wartości. Podobnie jak w przypadku konstruktorów i destruktorów, również w przypadku operatorów konwersji nie określa się typu wartości zwracanej.


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0204 Przeciążanie operatorów W poprzednim rozdziale nauczyłeś się przeciążać me
Poznaj C++ w$ godziny0208 Przeciążanie operatorów 199Listing 14.3. Operator przedrostkowy i
Poznaj C++ w$ godziny0210 Przeciążanie operatorów 201 Przeciążanie operatorów
Poznaj C++ w$ godziny0212 Przeciążanie operatorów 203 ITrzy = 1Jeden + lDwa; niż ITrzy - 1Jeden.Doda
Poznaj C++ w$ godziny0216 Przeciążanie operatorów 207 EFEKT DZIAŁANIA: Compile error! Unable to conv
Poznaj C++ w$ godziny0206 197Przeciążanie operatorów Listing 14.2. Przeciążenie operatora
gielda?rmakologia od t7 14. c 15. d 16. b 17. b 18. e 19. e 20. a21. d 22. c 23. c 24. e 25. d 26.
img040 (17) 115 - T ablica 7.5 z . 7 22 23 24 25 26 27 28 29 30 D z 24 24 24 30 30
23. 24. 25. Analityka medyczna 2 rok
równowaga2 22 23 24 25 26 "17 2
Obraz0007 UUU4INA DZIEŃ MIESIĄC 1 2 3 4 5 * 7 8 9 10 U W * * 15 16 17 18 19 20 21 22 23 24 25 26 2
kalendarz 11?lla styczeń 7 M 10 11 12 13 14 15 16 17 18 19 20 21 2^23 24 25 26 27 28 29 30
KALENDARZ 11 (7) January M Tu W Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
kk 2 22 23 24 25 i 29 30 31 [Al

więcej podobnych podstron