Przeciążanie operatorów 201
Przeciążanie operatorów 201
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40;
41:
42:
43:
44:
Licznik::Licznik(int wartoscPociatkowa): jegoWartoso(wartoscPoczatkowa)
U
Licznik::Licznik(): jegoWartosc(0)
O
Licznik Licznik::Dodaj(const Licznik & rhs)
return Licznik(jegoWartoscł rhs.PobierzWartosc());
int main()
Licznik lJeden(2), lDwa(4), ITrzy;
ITrzy = 1Jeden.Dodaj(lDwa);
cout « "1 Jeden: " « 1 Jeden. PobierzWartosc ()« endl; cout « "lDwa: " « lDwa.PobierzWartosc() « endl; cout « "ITrzy: " « ITrzy.PobierzWartosc() « endl;
return 0;
EFEKT DZIAŁANIA:
1Jeden: 2 lDwa: 4 ITrzy: 6
ANALIZA:
W linii 15 deklarujemy funkcję Dodaj (). Jako parametr pobiera ona
stalą referencję do obiektu klasy Licznik, który będzie dodany do aktualnego obiektu. Funkcja Dodaj () zwraca obiekt, który będzie można przypisać do innego obiektu, tak jak pokazano w linii 38. Widzimy, że 1 Jeden jest obiektem, lDwa jest parametrem funkcji Dodaj (), natomiast ITrzy jest obiektem, do którego będzie przypisany wynik dodawania.
Obiekt ITrzy jest tworzony bez podanej wartości początkowej. Musi być wykorzystany konstruktor domyślny. Inicjalizuje on zmienną jegoWartosc wartością 0, tak jak pokazano w liniach 26-28. Ponieważ obiekty lJeden i lDwa muszą być zainicjalizowane niezerową, podaną wartością, dlatego stworzyliśmy jeszcze jeden konstruktor, zdefiniowany w liniach 22-24. Można było również zrezygnować z konstruktora domyślnego i określić wartość domyślną dla parametru konstruktora zadeklarowanego w linii 11.
W liniach 30-33 poprzedniego programu zdefiniowaliśmy funkcję Dodaj (). Ona działa, lecz jej użycie jest raczej nienaturalne. Lepszym, bardziej intuicyjnym rozwiązaniem jest przeciążenie operatora dodawania (+). Ilustruje to listing 14.5.
22: Licznik::Licznik(int wartoscPoczatkowa):
23: jegoWartosc(wartoscPoczatkowa)
24: U
25:
26: Licznik::Licznik():
27: jegoWartosc(0)
28: {}
29:
30: Licznik Licznik::Dodaj(const Licznik & rhs)
32: return Licznik(jegoWartoscł rhs.PobierzWartosc());
34:
35: int main()
37: Licznik lJeden (2), lDwa(4), ITrzy;
38: ITrzy = lJeden.Dodaj(lDwa);
39: cout « "lJeden: " « 1 Jeden. PobierzWartosc()« endl;
40: cout « "lDwa: " « lDwa.PobierzWartosc() « endl;
41: cout « "ITrzy: " « ITrzy.PobierzWartosc() « endl;
42:
43: return 0;
44: }
lJeden: 2 lDwa: 4 ITrzy: 6
W linii 15 deklarujemy funkcję Dodaj (). Jako parametr pobiera ona stałą referencję do obiektu klasy Licznik, który będzie dodany do aktualnego obiektu. Funkcja Dodaj () zwraca obiekt, który' będzie można przypisać do innego obiektu, tak jak pokazano w linii 38. Widzimy, że lJeden jest obiektem, lDwa jest parametrem funkcji Dodaj (), natomiast ITrzy jest obiektem, do którego będzie przypisany wynik dodawania.
Obiekt ITrzy jest tworzony bez podanej wartości początkowej. Musi być wykorzystany konstruktor domyślny. Inicjalizuje on zmienną jegoWartosc wartością 0, tak jak pokazano w liniach 26-28. Ponieważ obiekty lJeden i lDwa muszą być zainicjalizowane niezerową, podaną wartością, dlatego stworzyliśmy jeszcze jeden konstruktor, zdefiniowany w liniach 22-24. Można było również zrezygnować z konstruktora domyślnego i określić wartość domyślną dla parametru konstruktora zadeklarowanego w linii 11.
W liniach 30-33 poprzedniego programu zdefiniowaliśmy funkcję Dodaj (). Ona działa, lecz jej użycie jest raczej nienaturalne. Lepszym, bardziej intuicyjnym rozwiązaniem jest przeciążenie operatora dodawania (+ ). Ilustruje to listing 14.5.