[ Pobierz całość w formacie PDF ]

definiuj w pliku .cpp.
U ywaj const wsz dzie tam, gdzie
jest to mo liwe.
Podsumowanie
W tej lekcji nauczy e si tworzy nowe typy danych za pomoc klas. Wiesz tak e,
jak definiowa zmienne tych nowych typów, które nazywamy obiektami.
Klasa mo e mie dane sk adowe, którymi s zmienne ró nych typów, cznie
z innymi klasami. Poza tym, klasa mo e zawiera funkcje sk adowe  nazywane
równie metodami. Wymienione funkcje sk adowe s u do manipulowania
danymi sk adowymi oraz przeprowadzania innych operacji.
Pytania i odpowiedzi 341
Elementy sk adowe klasy, zarówno dane, jak i funkcje, mog by publiczne b d
prywatne. Elementy publiczne s dost pne w dowolnym miejscu programu.
Z kolei elementy prywatne s dost pne jedynie dla funkcji sk adowych danej
klasy. Domy lnie, elementy sk adowe s definiowane jako prywatne.
Dobrym nawykiem w programowaniu jest izolowanie interfejsu  inaczej
deklaracji  klasy w pliku nag ówkowym. Zazwyczaj odbywa si to poprzez
u ycie pliku z rozszerzeniem .h, a nast pnie wykorzystanie go w plikach kodu
(z rozszerzeniem .cpp) za pomoc instrukcji include. Implementacja metod klasy
znajduje si w pliku z rozszerzeniem .cpp.
Konstruktory klasy mog by u ywane do inicjalizacji danych sk adowych
obiektu. Natomiast destruktory s wykonywane w trakcie niszczenia obiektu.
W destruktorze bardzo cz sto nast puje zwolnienie pami ci i innych zasobów,
które mog y zosta zaalokowane przez metody klasy.
Pytania i odpowiedzi
Pytanie: Jak du y jest obiekt klasy?
Odpowied : Wielko obiektu w pami ci zale y od wielko ci jego zmiennych
sk adowych. Metody klasy zu ywaj bardzo niewielkie ilo ci pami ci, która jest
wykorzystywana do przechowywania informacji o po o eniu metody (wska nika).
Niektóre kompilatory umieszczaj zmienne w pami ci w taki sposób, e dwubajtowe
zmienne zu ywaj wi cej ni tylko dwa bajty pami ci. Zajrzyj do dokumentacji
u ywanego kompilatora, aby to sprawdzi . Jednak na tym etapie nie nale y
przejmowa si takimi szczegó ami.
Pytanie: Je eli zadeklaruj klas Cat wraz z prywatnym elementem sk adowym
itsAge, a nast pnie zdefiniuj dwa obiekty Frisky i Boots, czy obiekt Boots
b dzie mia dost p do zmiennej sk adowej itsAge obiektu Frisky?
Odpowied : Nie. Ró ne egzemplarze klasy mog uzyska dost p jedynie do danych
publicznych innych egzemplarzy tej klasy. Innymi s owy, je eli Frisky i Boots
to egzemplarze klasy Cat, funkcje sk adowe obiektu Frisky mog uzyska dost p
do danych obiektu Frisky, ale ju nie do danych obiektu Boots.
Pytanie: Dlaczego nie powinienem definiowa jako publicznych wszystkich
danych sk adowych?
342 Lekcja 10. Klasy i obiekty
Odpowied : Zdefiniowanie danych sk adowych jako prywatne umo liwia
klientowi klasy u ywanie tych danych bez adnej zale no ci dotycz cej sposobu
ich przechowywania b d obliczania. Przyk adowo, je eli klasa Cat (kot) ma
metod GetAge(), klient klasy Cat mo e zapyta obiekt o wiek kota, nie znaj c
i nie przejmuj c si sposobem, w jaki klasa Cat przechowuje ten wiek b d jak
oblicza go w locie. Oznacza to, e programista klasy Cat mo e w przysz o ci zmieni
projekt tej klasy bez wymagania od u ytkowników klasy Cat zmiany ich programów.
Pytanie: Je eli u ycie funkcji const do zmiany klasy powoduje b d w trakcie
kompilacji, to dlaczego nie powinienem po prostu pozby si s ów kluczowych
const, by mie pewno , e te b dy nie wyst pi ?
Odpowied : Je eli funkcja sk adowa nie powinna zmienia klasy, to u ycie s owa
kluczowego const jest dobrym sposobem zagwarantowania, e kompilator
pomo e Ci w wykryciu pope nionych b dów. Przyk adowo, funkcja GetAge()
mo e nie mie adnego powodu do zmiany klasy Cat, ale w implementacji mo e
znajdowa si poni sza linia kodu:
if (itsAge = 100) cout
Zdefiniowanie funkcji GetAge() jako const powoduje, e kompilator zg osi b d
w powy szej linii kodu. Celem programisty by o sprawdzenie, czy warto
zmiennej itsAge wynosi 100, ale ten kod przez pomy k przypisuje warto 100
zmiennej itsAge. Poniewa przypisanie powoduje zmian klasy  a zdefiniowano,
e ta metoda nie powinna modyfikowa klasy  kompilator wychwytuje b d.
Ten rodzaj b du mo e by trudny do wychwycenia poprzez samo przegl danie
kodu. Oko bardzo cz sto widzi to, co chce zobaczy . Co wa niejsze, mo e wydawa
si , e program dzia a prawid owo, cho zmiennej itsAge przypisano niew a ciw
warto . Wcze niej czy pó niej to musi spowodowa problemy.
Pytanie: Czy istnieje jakikolwiek powód u ywania struktury w programie C++?
Odpowied : Wielu programistów C++ rezerwuje s owo kluczowe struct dla
klas pozbawionych funkcji. To relikt starych struktur C, które nie mia y funkcji.
Szczerze mówi c, to myl ca i kiepska praktyka programistyczna. Dzisiejsza
struktura pozbawiona metod jutro mo e ich potrzebowa . Wówczas b dziesz
zmuszony albo do zmiany na typ class, albo do z amania regu y i umieszczenia
metod w strukturze. Je eli musisz wywo a star funkcj j zyka C wymagaj c
okre lonej struktury, jest to jedyny dobry powód jej u ywania.
Warsztaty 343
Pytanie: Niektórzy programi ci pracuj cy z programowaniem zorientowanym
obiektowo u ywaj terminu tworzenie egzemplarza. Co to oznacza?
Odpowied : Tworzenie egzemplarza to po prostu okre lenie procesu tworzenia
obiektu na podstawie klasy. Okre lony obiekt zdefiniowany jako konkretny typ
klasy to pojedynczy egzemplarz klasy.
Warsztaty
Warsztaty zawieraj pytania w formie quizu, które pomog Ci w utrwaleniu
wiedzy przedstawionej w tej lekcji, a tak e wiczenia pozwalaj ce na sprawdzenie
stopnia opanowania materia u. Spróbuj odpowiedzie na pytania i rozwi za quiz
przed sprawdzeniem odpowiedzi w dodatku D. Zanim przejdziesz do kolejnej
lekcji, upewnij si tak e, e rozumiesz odpowiedzi.
Quiz
1. Co to jest operator kropki i do czego s u y?
2. Co powoduje zarezerwowanie pami ci  deklaracja czy definicja?
3. Czy deklaracja klasy jest jej interfejsem, czy implementacj ?
4. Jaka jest ró nica mi dzy publicznymi i prywatnymi danymi sk adowymi?
5. Czy funkcja sk adowa mo e by prywatna?
6. Czy dana sk adowa mo e by publiczna?
7. Je eli zadeklarujesz dwa obiekty Cat, to czy mog mie ró ne warto ci
w swoich elementach sk adowych itsAge?
8. Czy deklaracje klas s ko czone rednikiem? A definicje metod klasy?
9. Jaki b dzie nag ówek funkcji Meow() klasy Cat, je li nie pobiera ona
parametrów i zwraca void?
10. Która funkcja jest wywo ywana w celu inicjalizacji klasy?
wiczenia
1. Napisz kod deklaruj cy klas o nazwie Employee wraz z nast puj cymi
danymi sk adowymi: itsAge, itsYearsOfService oraz itsSalary.
2. Przepisz deklaracj klasy Employee w taki sposób, aby dane sk adowe
by y prywatne. Zapewnij publiczne metody akcesorów pozwalaj ce na
pobieranie i ustawianie warto ci ka dej danej sk adowej.
344 Lekcja 10. Klasy i obiekty
3. Napisz program u ywaj cy klasy Employee, który tworzy dwóch
pracowników. Ustaw warto ci ich danych sk adowych itsAge,
itsYearsOfService i itsSalary, a nast pnie wy wietl je. B dziesz
musia doda kod tak e w metodach akcesorów.
4. Kontynuuj c wiczenie 3., napisz kod dla metody klasy Employee, której
celem b dzie podanie zarobków ka dego pracownika zaokr glonych [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • imuzyka.prv.pl