[ Pobierz całość w formacie PDF ]

poÅ‚Ä…czyć je w klas¹  samochód . Deklaruje to relacj¹ posiadania. Samochód posiada
silnik, koÅ‚a i skrzyni¹ biegów.
Wezmy inny przykÅ‚ad. ProstokÄ…t skÅ‚ada si¹ z odcinków. Odcinek jest zdefiniowany
przez dwa punkty. Punkt jest zdefiniowany przez współrz¹dnÄ… x i współrz¹dnÄ… y. Li-
sting 6.8 przedstawia peÅ‚nÄ… deklaracj¹ klasy (prostokÄ…t), która może wy-
stąpić w pliku RECTANGLE.hpp. Ponieważ prostokąt jest zdefiniowany jako cztery
odcinki Å‚Ä…czÄ…ce cztery punkty, zaÅ› każdy punkt odnosi si¹ do współrz¹dnej w ukÅ‚a-
dzie, najpierw zadeklarujemy klas¹ (punkt) jako przechowujÄ…cÄ… współrz¹dne
x oraz y punktu. Listing 6.9 zawiera implementacje obu klas.
Listing 6.8. Deklarowanie kompletnej klasy
154 Część I
Listing 6.9. RECTANGLE.cpp
Rozdział 6. f& Programowanie zorientowane obiektowo 155
f&
f&
f&
Linie od 3. do 14. listingu 6.8 deklarujÄ… klas¹ (punkt), która sÅ‚uży do przecho-
wywania współrz¹dnych i okreÅ›lonego punktu rysunku. W tym programie nie
wykorzystujemy należycie klasy . Jej zastosowania wymagają jednak inne me-
tody rysunkowe.
Gdy nadasz klasie nazw , niektóre kompilatory zgłoszą błąd. W ta-
kim przypadku po prostu zmie nazw klasy na .
156 Część I
W deklaracji klasy , w liniach 12. i 13., zadeklarowaliśmy dwie zmienne skła-
dowe ( oraz ). Te zmienne przechowujÄ… współrz¹dne punktu. ZakÅ‚adamy, że
współrz¹dna roÅ›nie w prawo, a współrz¹dna w gór¹. IstniejÄ… także inne systemy.
W niektórych programach okienkowych współrz¹dna y roÅ›nie  w dół okna.
Klasa używa akcesorów inline, zwracajÄ…cych i ustawiajÄ…cych współrz¹dne i
punktu. Te akcesory zostały zadeklarowane w liniach od 7. do 10. Punkty używają
konstruktora i destruktora domyÅ›lnego. W zwiÄ…zku z tym ich współrz¹dne trzeba
ustawiać jawnie.
Linia 17. rozpoczyna deklaracj¹ klasy (prostokÄ…t). Klasa ta kÅ‚ada si¹ z czte-
rech punktów reprezentujących cztery narożniki prostokąta.
Konstruktor klasy (linia 20.) otrzymuje cztery wartości całkowite, (górna),
(lewa), (dolna) oraz (prawa). Do czterech zmiennych składowych (li-
sting 6.9) kopiowane sÄ… cztery parametry konstruktora i tworzone sÄ… cztery punkty.
Oprócz standardowych akcesorów, klasa posiada funkcj¹ (po-
bierz obszar), zadeklarowaną w linii 43. Zamiast przechowywać obszar w zmiennej,
funkcja oblicza go w liniach od 28. do 30. listingu 6.9. W tym celu oblicza
szerokość i wysokość prostokÄ…ta, nast¹pnie mnoży je przez siebie.
Uzyskanie współrz¹dnej lewego górnego wierzchoÅ‚ka prostokÄ…ta wymaga dost¹pu
do punktu (lewy górny) i zapytania o jego współrz¹dnÄ… . Ponieważ funk-
cja jest funkcją klasy , może ona bezpośrednio odwoływać
si¹ do prywatnych danych tej klasy, wÅ‚Ä…cznie ze zmiennÄ… ( ). Ponieważ
jest obiektem klasy , a zmienna tej klasy jest prywatna, funk-
cja nie może odwoÅ‚ywać si¹ do niej bezpoÅ›rednio. Zamiast tego,
w celu uzyskania tej wartości musi użyć publicznego akcesora .
Linia 33. listingu 6.9 stanowi poczÄ…tek ciaÅ‚a programu. Pami¹ć nie jest alokowana aż
do linii 36.; w obszarze tym nic si¹ nie dzieje. Jedyna rzecz, jakÄ… zrobiliÅ›my, to poin-
formowanie kompilatora, jak ma stworzyć punkt i prostokąt (gdyby były potrzebne
w przyszłości).
W linii 36. definiujemy obiekt typu , przekazując mu wartości , ,
oraz .
W linii 38. tworzymy lokalnÄ… zmiennÄ… (obszar) typu . Ta zmienna przecho-
wuje obszar stworzonego przez nas prostokÄ…ta. ZmiennÄ… inicjalizujemy za po-
mocÄ… wartoÅ›ci zwróconej przez funkcj¹ klasy .
Klient klasy może stworzyć obiekt tej klasy i uzyskać jego obszar, nie zna-
jÄ…c nawet implementacji funkcji .
Plik RECT.hpp został przedstawiony na listingu 6.8. Obserwując plik nagłówkowy, któ-
ry zawiera deklaracj¹ klasy , programista może wysnuć wniosek, że funkcja
Rozdział 6. f& Programowanie zorientowane obiektowo 157
f&
f&
f&
zwraca wartość typu . Sposób, w jaki funkcja uzyskuje t¹ war-
tość, nie interesuje klientów klasy . Autor klasy mógłby zmienić
funkcj¹ ; nie wpÅ‚yn¹Å‚oby to na programy, które z niej korzystajÄ….
Często zadawane pytanie
Jaka jest różnica pomi dzy deklaracją a definicją?
Odpowied
Deklaracja wprowadza nowÄ… nazw , lecz nie alokuje pami ci; dokonuje tego
definicja.
Wszystkie deklaracje (z kilkoma wyjątkami) są także definicjami. Najważniejszym
wyjÄ…tkiem jest deklaracja funkcji globalnej (prototyp) oraz deklaracja klasy (zwykle
w pliku nagłówkowym).
Struktury
Bardzo bliskim kuzynem słowa kluczowego jest słowo kluczowe , uży-
wane do deklarowania struktur. W C++ struktura jest odpowiednikiem klasy, ale
wszystkie jej skÅ‚adowe sÄ… domyÅ›lnie publiczne. Możesz zadeklarować struktur¹ do-
kÅ‚adnie tak, jak klas¹; możesz zastosować w niej te same zmienne i funkcje skÅ‚adowe.
Gdy przestrzegasz jawnego deklarowania publicznych i prywatnych sekcji klasy, nie
ma żadnej różnicy pomi¹dzy klasÄ… a strukturÄ….
Spróbuj wprowadzić do listingu 6.8 nast¹pujÄ…ce zmiany:
f& w linii 3., zmień na ,
f& w linii 17., zmień na .
Nast¹pnie skompiluj i uruchom program. Otrzymane wyniki nie powinny si¹ od sie-
bie różnić.
Dlaczego dwa słowa kluczowe
spełniaj t sam funkcj
Prawdopodobnie zastanawiasz si¹, dlaczego dwa sÅ‚owa kluczowe speÅ‚niajÄ… t¹ samÄ…
funkcj¹. Przyczyn należy szukać w historii j¹zyka. J¹zyk C++ powstawaÅ‚ jako rozsze-
rzenie j¹zyka C. J¹zyk C posiada struktury, ale nie posiadajÄ… one metod. Bjarne Stro-
ustrup, twórca j¹zyka C++, rozbudowaÅ‚ struktury, ale zmieniÅ‚ ich nazw¹ na klasy, od-
zwierciedlając w ten sposób ich nowe, rozszerzone możliwości.
158 Część I
TAK
Umieszczaj deklaracj¹ klasy w pliku .hpp, zaÅ› funkcje skÅ‚adowe definiuj w pliku .cpp.
Używaj wsz¹dzie tam, gdzie jest to możliwe.
Zanim przejdziesz dalej, postaraj si¹ dokÅ‚adnie zrozumieć zasady dziaÅ‚ania klasy. [ Pobierz caÅ‚ość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • actus.htw.pl