WÄ…tki
 
[ 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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • bialaorchidea.pev.pl
  •  
    Copyright © 2006 MySite. Designed by Web Page Templates
     
    Copyright © 2006 MySite. Designed by Web Page Templates