|
|
|
|
|
|
[ Pobierz całość w formacie PDF ]
wyszukanie w programach pomy ek, zanim stan si one b dami. Ka dy szanuj cy si programista potrafi znale sposób na obej cie prywatno ci sk adowych. Stroustrup, autor j zyka C++, stwierdza, e ...mechanizmy ochrony z poziomu j zyka chroni przed pomy k , a nie przed wiadomym oszustwem (WNT, 1995). S owo kluczowe class Sk adnia s owa kluczowego class jest nast puj ca: class nazwa_klasy { // s owa kluczowe kontroli dost pu // zadeklarowane zmienne i sk adowe klasy }; S owo kluczowe class s u y do deklarowania nowych typów. Klasa stanowi zbiór danych sk adowych klasy, które s zmiennymi ró nych typów, tak e innych klas. Klasa zawiera tak e funkcje klasy tzw. metody które s funkcjami u ywanymi do manipulowania danymi w danej klasie i wykonywania innych us ug dla klasy. Obiekty nowego typu definiuje si w taki sam sposób, w jaki definiuje si inne zmienne. Nale y okre li typ (klas ), a po nim nazw zmiennej (obiektu). Do uzyskania dost pu do funkcji i danych klasy s u y operator kropki (.). S owa kluczowe kontroli dost pu okre laj , które sekcje klasy s prywatne, a które publiczne. Domy lnie wszystkie sk adowe klasy s prywatne. Ka de s owo kluczowe zmienia kontrol dost pu od danego miejsca a do ko ca klasy, lub kontrol wyst pienia nast pnego s owa kluczowego kontroli dost pu. Deklaracja klasy ko czy si zamykaj cym nawiasem klamrowym i rednikiem. Przyk ad 1 class Cat { public: unsigned int Age; unsigned int Weight; void Meow(); }; Cat Frisky; Frisky.Age = 8; Frisky.Weight = 18; Frisky.Meow(); Przyk ad 2 class Car { Implementowanie metod klasy 321 public: // pi nast pnych sk adowych jest publicznych void Start(); void Accelerate(); void Brake(); void SetYear(int year); int GetYear(); private: // pozosta a cz jest prywatna int Year; char Model [255]; }; // koniec deklaracji klasy Car OldFaithful; // tworzy egzemplarz klasy int bought; // lokalna zmienna typu int OldFaithful.SetYear(84); // ustawia sk adow Year na 84 bought = OldFaithful.GetYear(); // ustawia zmienn bought na 84 OldFaithful.Start(); //wywo uje metod Start Tak Nie U ywaj publicznych akcesorów, czyli Nie deklaruj zmiennych sk adowych publicznych funkcji dost powych. jako publiczne, o ile nie ma takiej potrzeby. Odwo uj si do prywatnych zmiennych sk adowych z funkcji sk adowych Nie u ywaj prywatnych zmiennych klasy. sk adowych klasy poza t klas . Implementowanie metod klasy Jak ju si przekona e , akcesory stanowi publiczny interfejs do prywatnych danych klasy. Ka dy akcesor musi posiada , wraz z innymi zadeklarowanymi metodami klasy, implementacj . Implementacja jest nazywana definicj funkcji. Definicja funkcji sk adowej rozpoczyna si podobnie jak definicja zwyk ej funkcji. W pierwszej kolejno ci trzeba poda typ zwracany z danej funkcji lub u y s owa kluczowego void, je li funkcja niczego nie zwraca. Nast pnie podajemy nazw klasy, po której wyst puj dwa dwukropki, nazwa funkcji i jej parametry. Listing 10.3 przedstawia pe n deklaracj prostej klasy Cat, wraz z implementacj jej akcesorów i jednej ogólnej funkcji tej klasy. 322 Lekcja 10. Klasy i obiekty Listing 10.3. Implementacja metod prostej klasy 1: // Demonstruje deklarowanie klasy oraz 2: // definiowanie jej metod 3: #include // dla cout 4: 5: class Cat // pocz tek deklaracji klasy 6: { 7: public: // pocz tek sekcji publicznej 8: int GetAge(); // akcesor 9: void SetAge(int age); // akcesor 10: void Meow(); // ogólna funkcja 11: private: // pocz tek sekcji prywatnej 12: int itsAge; // zmienna sk adowa 13: }; 14: 15: // GetAge, publiczny akcesor 16: // zwracaj cy warto sk adowej itsAge 17: int Cat::GetAge() 18: { 19: return itsAge; 20: } 21: 22: // definicja SetAge, akcesora 23: // publicznego 24: // ustawiaj cego sk adow itsAge 25: void Cat::SetAge(int age) 26: { 27: // ustawia zmienn sk adow itsAge 28: // zgodnie z warto ci przekazan w parametrze age 29: itsAge = age; 30: } 31: 32: // definicja metody Meow 33: // zwraca: void 34: // parametery: brak 35: // dzia anie: wy wietla na ekranie s owo "miauczy" 36: void Cat::Meow() 37: { 38: std::cout 39: } 40: 41: // tworzy kota, ustawia jego wiek, sprawia, 42: // e miauczy, wy wietla jego wiek i ponownie miauczy. 43: int main() 44: { 45: Cat Frisky; 46: Frisky.SetAge(5); 47: Frisky.Meow(); Implementowanie metod klasy 323 48: std::cout 49: std::cout 50: Frisky.Meow(); 51: return 0; 52: } Wynik Miauczy. Frisky jest kotem i ma 5 lat. Miauczy. Analiza Linie od 5. do 13. zawieraj definicj klasy Cat (kot). Linia 7. zawiera s owo kluczowe public, które informuje kompilator, e to, co po nim nast puje, jest zestawem publicznych sk adowych. Linia 8. zawiera deklaracj publicznego akcesora GetAge() (pobierz wiek). GetAge() zapewnia dost p do prywatnej zmiennej sk adowej itsAge (jego wiek), zadeklarowanej w linii 12. Linia 9. zawiera publiczny akcesor SetAge() (ustaw wiek). Funkcja SetAge() otrzymuje parametr typu int, który nast pnie przypisuje sk adowej itsAge. Linia 10. zawiera deklaracj metody Meow() (miaucz). Funkcja Meow() nie jest akcesorem. Jest to ogólna metoda klasy, wy wietlaj ca na ekranie s owo Miauczy. Linia 11. rozpoczyna sekcj prywatn , która obejmuje jedynie zadeklarowan w linii 12. prywatn sk adow itsAge. Deklaracja klasy ko czy si w linii 13. zamykaj cym nawiasem klamrowym i rednikiem. Linie od 17. do 20. zawieraj definicj sk adowej funkcji GetAge(). Ta metoda nie ma parametrów i zwraca warto ca kowit . Zauwa , e ta metoda klasy zawiera nazw klasy, dwa dwukropki oraz nazw funkcji (linia 17.). Ta sk adnia informuje kompilator, e definiowana funkcja GetAge() jest w a nie t funkcj , która zosta a zadeklarowana w klasie Cat. Poza formatem tego nag ówka, definiowanie funkcji w asnej GetAge() niczym nie ró ni si od definiowania innych (zwyk ych) funkcji. Funkcja GetAge() posiada tylko jedn lini i zwraca po prostu warto zmiennej sk adowej itsAge. Zauwa , e funkcja main() nie ma dost pu do tej zmiennej sk adowej, gdy jest ona prywatna dla klasy Cat. Funkcja main() ma za to dost p do publicznej metody GetAge(). 324 Lekcja 10. Klasy i obiekty Poniewa ta metoda jest sk adow klasy Cat, ma pe ny dost p do zmiennej itsAge. Dzi ki temu mo e zwróci funkcji main() warto zmiennej itsAge. Linia 25. zawiera definicj funkcji sk adowej SetAge(). Mo esz zauwa y , e ta funkcja pobiera jedn warto w postaci liczby ca kowitej (age) i nie zwraca adnej warto ci, co jest wskazane przez s owo kluczowe void. Ta funkcja posiada parametr w postaci warto ci ca kowitej i przypisuje sk adowej itsAge jego warto (linia 29.). Poniewa jest sk adow klasy Cat, ma bezpo redni dost p do jej zmiennych prywatnych i publicznych. Linia 36. rozpoczyna definicj (czyli implementacj ) metody Meow() klasy Cat. Jest to jednoliniowa funkcja wy wietlaj ca na ekranie s owo Miauczy , zako czone znakiem nowej linii. Pami taj, e znak \n powoduje przej cie do nowej linii. Mo esz zauwa y , e metoda Meow() jest zaimplementowana podobnie jak funkcja akcesora, czyli rozpoczyna si od typu zwracanej warto ci, a nast pnie mamy nazw klasy, nazw funkcji oraz parametry (w tym przypadku nie ma adnych parametrów).
[ Pobierz całość w formacie PDF ] zanotowane.pldoc.pisz.plpdf.pisz.plbialaorchidea.pev.pl
|
|
|