Przeciążanie operatorów 207
EFEKT DZIAŁANIA:
Compile error! Unable to convert int to Licznik (błąd kompilacji! nie można przekonwertować int do Licznik)
Klasa Licznik, zadeklarowana w liniach 7—17, posiada tylko konstruktor domyślny. Nie ma zadeklarowanej żadnej specjalnej metody do przerabiania zmiennej typu int na obiekt klasy Licznik, dlatego linia 26 jest źródłem błędu kompilacji. Kompilator nie jest w stanie nic zrobić zanim sam nie określisz, że dana wartość typu int ma zostać przypisana do zmiennej wewnętrznej jegoWartosc.
Listing 14.8 rozwiązuje ten problem poprzez stworzenie operatora konwersji: konstruktora pobierającego jako parametr wartość typu int i budującego obiekt klasy Licznik.
1: // Listing 14.8
2: // Konstruktor jako operator konwersji
3:
4:
5: #include <iostream.h>
6:
7: class Licznik
8: {
9: public:
10: Licznik () ;
11: Licznik(int wartość);
12: -Licznik(){}
13: int PobierzWartosc()const { return jegoWartosc; }
14: void UstawWartosc(int x) (jegoWartosc = x; }
15: private:
16: int jegoWartosc;
17:
19:
20: Licznik::Licznik():
21: jegoWartosc(0)
22: {}
23:
24: Licznik::Licznik(int wartość):
25: jegoWartosc(wartość)
27:
28:
29: int main()
31: int zlnt =5;
32: Licznik licz = zlnt;
33: cout « "licz: " « licz.PobierzWartosc() « endl;
34: return 0;
35: )
Compile error! Onable to convert int to Licznik
(bi<ąd kompilacji! nie można przekonirertotrać int do Licznik)
ANALIZA:
Klasa Licznik, zadeklarowana w liniach 7-17, posiada tylko konstruktor domyślny. Nie ma zadeklarowanej żadnej specjalnej metody do przerabiania zmiennej typu int na obiekt klasy Licznik, dlatego linia 26 jest źródłem błędu kompilacji. Kompilator nie jest w stanie nic zrobić zanim sam nie określisz, że dana wartość typu int ma zostać przypisana do zmiennej wewnętrznej jegoWartosc.
Listing 14.8 rozwiązuje ten problem poprzez stworzenie operatora konwersji: konstruktora pobierającego jako parametr wartość typu int i budującego obiekt klasy Licznik.
1: // Listing 14.8
2: // Konstruktor jako operator konwersji
3:
4:
5: łfinclude <iostream.h>
6:
7: class Licznik
8: {
9: public:
10: Licznik ();
11: Licznik(int wartość);
12: -Licznik(){)
13: int PobierzWartosc()const { return jegoWartosc; )
14: void CJstawWartosc (int x) (jegoWartosc = x; )
15: private:
16: int jegoWartosc;
17:
19:
20: Licznik::Licznik():
21: jegoWartosc(0)
23:
24: Licznik::Licznik(int wartość):
25: jegoWartosc(wartość)
27:
28:
29: int main()
31: int zlnt = 5;
32: Licznik licz = zlnt;
33: cout « "licz: " « licz.PobierzWartosc() « endl;
34: return 0;
35: >