To tylko jedna z 13 stron tej notatki. Zaloguj się aby zobaczyć ten dokument.
Zobacz
całą notatkę
6 Rozdział 2 Klasy 2.1 Wprowadzenie Programowanie obiektowe polega na operowaniu w programie obiektami, którymi są dane wraz z tak zwanymi metodami, czyli funkcjami wyko- rzystywanymi wyłącznie dla ściśle określonych danych. Zmienna obiektowa lub po prostu obiekt jest elementem pewnej klasy. Klasa jest to nowy typ danych zdefiniowany przez programistę. Klasę definiujemy w podobny sposób jak strukturę. Dla przykładu rozważmy następujący fragment programu: #define MAX 256 class ZbiorZnaki { protected: int znaki[MAX]; } Została zdefiniowana klasa o nazwie ZbiorZnaki, zawierająca pola bę- dące elementami tablicy znaki. Przed deklaracją tablicy jest umieszczone słowo protected . Oznacza to, że elementy tej tablicy są dostępne (przy użyciu operatora wyboru składowej - kropki) wyłącznie w danej klasie i wszystkich klasach pochodnych, natomiast nie są dostępne na zewnątrz klasy. Dostęp do zadeklarowanych pól, w naszym przypadku elementów tablicy, z programu oraz wyprowadzanie ich zawartości może odbywać 8 2. Klasy się wyłącznie przy wykorzystaniu metod czyli funkcji zdefiniowanych w danej klasie. Przypuśćmy teraz, że klasę ZbiorZnaki chcemy zastosować do reali- zacji operacji na zbiorze znaków (zakładamy, że znaków tych mamy 256 i stąd odpowiednia definicja stałej). Elementy tablicy znaki będą nam służyły do przechowywania informacji o tym, czy dany znak należy do zbioru znaków, czy też nie. Jeżeli dany znak należy do zbioru znaków, to w odpowiednim miejscu tablicy znaki umieścimy wartość 1, a w przeciw- nym przypadku wartość 0. To odpowiednie miejsce bardzo łatwo można wyznaczyć, ponieważ jeżeli w zmiennej x typu char jest umieszczony jakiś znak, to zmienną tę można bezpośrednio wykorzystać do zaindeksowania tablicy znaki. Rozważmy na przykład następujący fragment programu: char x; x = ’w’; znaki[x] = 1; Ponieważ kod znaku ’w’ to 119 więc wartość 1 będzie wpisana do 119 elementu tablicy znaki. Jak widać, jeżeli wykorzystujemy zmienną typu char do określenia indeksu tablicy, to dany znak zostanie zastąpiony jego kodem. Załóżmy dalej, że chcemy dysponować następującymi operacjami na zbiorze znaków: dodanie elementu do zbioru, obliczenie liczby elementów, wyprowadzenie wszystkich elementów zbioru oraz sprawdzenie czy dany znak należy do zbioru. Każdą z tych operacji zrealizujemy przy pomocy oddzielnej metody, tzn. funkcji, która może operować na ściśle określo- nych danych, a w naszym przypadku na tablicy znaki zadeklarowanej w części protected . Prototypy projektowanych metod musimy umieścić w deklaracji klasy
(…)
… jest taka, że wskaźnik ten
dodaje się tylko wtedy, gdy jest to konieczne. Przykłady wykorzystania
wskaźnika this zawiera dalsza część książki.
W przypadku, gdy chcemy zdefiniowaną przez nas klasę wykorzystać w innych programach, warto się zastanowić, jak to zrobić najwygodniej. Otóż powszechną praktyką programowania jest, że deklaracje
klasy umieszcza się w pliku nagłówkowym (z rozszerzeniem .h), a metody zdefiniowane…
… są w języku C++ również klasami. Można
wobec tego definiować w nich metody. Najważniejsza różnica polega na
18
2. Klasy
tym, że jeżeli składowe struktur i unii nie są umieszczone w części private, to są traktowane jak publiczne. W związku z tym przyjęło się
stosować struktury bez metod, nie wykorzystując w ogóle hermetyzacji,
a wszędzie tam gdzie jest konieczna ścisła kontrola dostępu do danych
używa się klas.
…
... zobacz całą notatkę
Komentarze użytkowników (0)