208 Godzina 14
licz: 5
ANALIZA:
W linii 11 zaszła ważna zmiana. Przeciążyliśmy konstruktor klasy tak, aby pobierał wartość typu int. Linie 24-26 zawierają implementację tego konstruktora. W efekcie otrzymaliśmy możliwość tworzenia obiektu klasy Licznik na podstawie wartości typu int.
Teraz kompilator ma możliwość wywołania konstruktora pobierającego jako argument wartość int. Zobacz jednak co będzie, kiedy spróbujemy odwrócić kolejność przypisania:
1: Licznik licz(5);
2: int zlnt = licz;
3: cout « "zlnt : " « zlnt « and;'
Taka sekwencja instrukcji ponownie spowoduje błąd kompilacji. Mimo że kompilator wie, jak przypisać wartość int do obiektu Licznik, to nie ma pojęcia, jak wykonać przypisanie odwrotne.
Żeby rozwiązać postawiony problem, C++ wprowadza operatory konwersji, które mogą zostać dodane do tworzonej klasy. Dzięki temu możemy określić, w jaki sposób ma przebiegać bezpośrednie przypisanie obiektu do zmiennych wbudowanych w C++. Ilustruje to listing 14.9. Jedna uwaga: operator konwersji nie ma określonej wartości typu wartości zwracanej. Zwraca on przekonwertowaną wartość.
1: // Listing 14.9
2: // 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 FobierzWartosc() const { return jegoWartosc; }
14: void UstawWartosc(int x) { jegoWartosc = x; }
15: operator int();
16: private:
17: int jegoWartosc;
18:
19: >;
20:
21: Licznik::Licznik():
22: j egoWartosc(0)
I
licz: 5
ANALIZA:
W linii 11 zaszła ważna zmiana. Przeciążyliśmy konstruktor klasy tak, aby pobierał wartość typu int. Linie 24—26 zawierają implementację tego konstruktora. W efekcie otrzymaliśmy możliwość tworzenia obiektu klasy Licznik na podstawie wartości typu int.
Teraz kompilator ma możliwość wywołania konstruktora pobierającego jako argument wartość int. Zobacz jednak co będzie, kiedy spróbujemy odwrócić kolejność przypisania:
1: Licznik licz (5);
2: int zlnt = licz;
3: cout « "zlnt : " « zlnt « end;'
Taka sekwencja instrukcji ponownie spowoduje błąd kompilacji. Mimo że kompilator wie, jak przypisać wartość int do obiektu Licznik, to nie ma pojęcia, jak wykonać przypisanie odwrotne.
Żeb>r rozwiązać postawiony problem. C++ wprowadza operatory konwersji, które mogą zostać dodane do tworzonej klasy. Dzięki temu możemy określić, w jaki sposób ma przebiegać bezpośrednie przypisanie obiektu do zmiennych wbudowanych w C++. Ilustruje to listing 14.9. Jedna uwaga: operator konwersji nie ma określonej wartości typu wartości zwracanej. Zwraca on przekonwertowaną wartość.
1: // Listing 14.9
2: // 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 OstawWartosc(int x) ( jegoWartosc = x; )
15: operator int();
16: private:
17: int jegoWartosc;
18:
19: } ;
20:
21: Licznik::Licznik():
22: jegoWartosc(0)