94 Godzina 7
UstawWiek() nie może być zadeklarowana jako const, ponieważ zmienia wartość zmiennej jegoWiek. Druga funkcja, PobierzWiek () może, a wręcz powinna być zadeklarowana jako const, ponieważ nie modyfikuje żadnej zmiennej w klasie, a jedynie zwraca aktualną wartość zmiennej jegoWiek. Krótko mówiąc, deklaracje obu funkcji powinny wyglądać następująco:
void UstawWiek(int wiek); int PobierzWiek() const;
Jeśli zadeklarujesz funkcję jako const, a późniejsza implementacja funkcji zmieni obiekt danej klasy (poprzez zmianę wartości należącej do klasy), to kompilator zgłosi komunikat błędu. Np. jeśli zmienisz funkcję PobierzWiek () tak, aby zliczała ile razy odczytywaliśmy wartość zmiennej jegoWiek (za pomocą dodatkowej zmiennej w klasie, np. licznik) to kompilator wygeneruje błąd. Stanie się tak, ponieważ zawartości obiektu klasy Kot zostanie zmieniona w momencie wywołania funkcji PobierzWiek ().
Deklarowanie funkcji wewnętrznych jako const (tam gdzie jest do możliwe) świadczy o dobrym stylu programowania. Kompilator sam wychwyci wszystkie błędy związane z niezamierzonymi zmianami zawartości obiektów.
Klientami nazywamy te części programu, które tworzą i wykorzystują obiekty danej klasy. Interfejs klasy (deklarację) można traktować jako kontrakt między tymi klientami. Mówi on jakie dane są dostępne w klasie i jak klasa się zachowuje.
Np. w deklaracji klasy Kot ustalasz, że każdy Kot (obiekt tej klasy) będzie miał zmienną wewnętrzną jegoWiek, która może być zainicjowana poprzez konstruktor, której wartość może być zmieniona za pomocą funkcji dostępu UstawWiek () i która może być odczytana za pomocą funkcji PobierzWiek (). Gwarantujesz również, że każdy Kot będzie umiał zamiauczeć (funkcja Miaucz ()).
UstawWiek () nie może być zadeklarowana jako const, ponieważ zmienia wartość zmiennej jegoWiek. Druga funkcja. PobierzWiek() może, a wręcz powinna być zadeklarowana jako const. ponieważ nie modyfikuje żadnej zmiennej w klasie, a jedynie zwraca aktualną wartość zmiennej jegoWiek. Krótko mówiąc, deklaracje obu funkcji powinny wyglądać następująco:
void UstawWiek(int wiek); int PobierzWiek() const;
Jeśli zadeklarujesz funkcję jako const, a późniejsza implementacja funkcji zmieni obiekt danej klasy (poprzez zmianę wartości należącej do klasy), to kompilator zgłosi komunikat błędu. Np. jeśli zmienisz funkcję PobierzWiek () tak, aby zliczała ile razy odczytywaliśmy wartość zmiennej jegoWiek (za pomocą dodatkowej zmiennej w klasie, np. licznik) to kompilator wygeneruje błąd. Stanie się tak, ponieważ zawartości obiektu klasy Kot zostanie zmieniona w momencie wywołania funkcji PobierzWiek().
Deklarowanie funkcji wewnętrznych jako const (tam gdzie jest do możliwe) świadczy o dobrym stylu programowania. Kompilator sam wychwyci wszystkie błędy związane z niezamierzonymi zmianami zawartości obiektów.
Klientami nazywamy te części programu, które tworzą i wykorzystują obiekty danej klasy. Interfejs klasy (deklarację) można traktować jako kontrakt między tymi klientami. Mówi on jakie dane są dostępne w klasie i jak klasa się zachowuje.
Np. w deklaracji klasy Kot ustalasz, że każdy Kot (obiekt tej klasy) będzie miał zmienną wewnętrzną jegoWiek, która może być zainicjowana poprzez konstruktor, której wartość może być zmieniona za pomocą funkcji dostępu UstawWiek () i która może być odczytana za pomocą funkcji PobierzWiek (). Gwarantujesz również, że każdy Kot będzie umiał zamiauczeć (funkcja Miaucz ()).
Jeśli zadeklarujesz funkcję PobierzWiek () jako const (powinieneś), to gwarantu
jesz również, że PobierzWiek () nie zmieni zawartości obiektu Kot.