Przeciążanie operatorów 209
24:
25: Licznik::Licznik(int wartość):
26: jegoWartosc(wartość)
28:
29: Licznik::operator int ()
31: return ( jegoWartosc );
33:
34: int main()
36: Licznik licz (5);
37: int zlnt = licz;
38: cout « "zlnt: " « zlnt « endl;
39: return 0;
40: }
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ć.
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.
24:
25: Licznik::Licznik(int wartość):
26: jegoWartosc(wartość)
28:
29: Licznik::operator int ()
31: return ( jegoWartosc );
33:
34 : int main ()
36: Licznik licz(5);
37: int zlnt = licz;
38: cout « "zlnt: " « zlnt « endl;
39: return 0;
40: )
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ć.
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.