1 Klasy. Klasa to inaczej mówi c typ który podobnie jak struktura skªada si z ró»nych typów danych. Tworz c klas programista tworzy nowy typ danych, który mo»e by modelem rzeczywistego obiektu. 1.1 Denicja klasy. class nasz_typ { //cialo klasy Jak wida wy»ej, denicja klasy nie jest trudna. Nale»y u»y instrukcji class, poda nazw klasy (nowego typu) a nast pnie doda klamry otwieraj c i zamykaj c (pomi dzy nie wprowadzamy zawarto± ciaªa klasy) po czym dodajemy ±rednik. 1.2 Skªadniki klasy. W celu utworzenia obiektu klasy post pujemy analogicznie jak w przypadku tworzenia zmiennych: nasz_typ nazwa_obiektu; W C++ istnieje mo»liwo± stworzenia typu pochodnego do danej klasy (wska¹nika lub referencji): nasz_typ * wsk; // wskaznik nasz_typ jakisobiekt; nasz_typ &przezwisko = jakisobiekt // referencja We wcze±niejszej denicji mo»na odszuka puste miejsce tzw. ciaªo klasy. To w nim deklarujemy skªadniki klasy. Skªadnikami klasy mog by ró»nego typu dane: class procesor { int l_rdzeni; float takt_zegara; 1
int l_watkow; char nazwa[80]; W celu odniesienia si do skªadników obiektu u»ywamy nast puj cej notacji: { obiekt.skªadnik { wska¹nik -> skªadnik { referencja.skªadnik Zaªó»my,»e tworzymy nast puj ce obiekty i przeprowadzamy na nich operacje: procesor i5; procesor * wsk; procesor & ipiatka; // definicja egzemplarza obiektu //definicja wskaznika // definicja referencji Aby przypisa warto± do skªadnika l si nast puj cymi metodami: rdzeni w obiekcie i5 nale»y posªu»y i5.l_rdzeni = 4; wsk = &i5; wsk -> l_rdzeni = 4; ipiatka.l_rdzeni = 4; Skªadnikami klasy mog by równie» funkcje. Nazywaj si one funkcjami skªadowymi. Za ich pomoc zwykle pracuje si na danych skªadowych. class telefon_kom { void dzwon(int num); void wibruj(bool wib); int numer_tel; bool wibracja; char nazwa_kontaktu[80]; char wyswietl_num_dzwoniacego (char kont[]); W powy»szej denicji mo»na zauwa»y,»e deklaracje funkcji pomieszane s z deklaracjami danych. Dzieje si tak, gdy» zakres wa»no±ci zadeklarowanych w klasie danych obejmuje caª klas. Skªadnikiem klasy mo»e by nie tylko dana typu wbudowanego. Mo»na rów- 2
nie» wykorzysta obiekt innej zdeniowanej klasy. 1.3 Etykiety. W powy»szych przykªadach mo»na byªo zaobserwowa element public. Byªa to tak zwana etykieta klasy. Klasy mog posiada trzy rodzaje etykiet: { private { oznacza ona,»e zadeklarowane za ni skªadniki b d dost pne jedynie w obr bie danej klasy. Oznacza to,»e jedynie funkcje skªadowe b d mogªy na nich operowa ; { public { oznacza ona,»e zadeklarowane za ni skªadniki b d dost pne zarówno w obr bie klasy jak i poza ni ; { protected { ta etykieta daje dost pno± tak jak etykieta private, ale dodatkowo udost pnia skªadowe klasom wywodz cym si od klasy w której jest u»yta. Zakªada si,»e dopóki w denicji klasy nie wyst pi»adna etykieta skªadniki uzyskuj dost p private. 1.4 Funkcje skªadowe. Funkcja skªadowa sªu»y do dokonania operacji na danych skªadowych klasy. Jest równie» jedynym (cho nie do ko«ca) narz dziem do przeprowadzania operacji na skªadnikach z etykiet private. Funkcj wywoªuje si dla konkretnego obiektu danej klasy. nazwa_obiektu.nazwa_funkcji_skladowej(argument); Mamy nast puj c klas 1 : class osoba { char nazwisko[80]; int wiek; void zapamietaj(char *, int); void wypisz(); oraz obiekty: osoba student1, student2, student3; 1 J. Gr bosz, Symfonia C++ 3
w celu skorzystania z funkcji skªadowej: student1.zapamietaj("jan Kowalski", 23); Funkcje skªadowe mo»na deniowa w dwóch miejscach: { wewn trz samej denicji klasy; { po zadeklarowaniu wewn trz denicji klasy funkcj umieszczamy poza jej ciaªem. Nale»y wówczas przed nazw funkcji (ale po typie zwracanych danych) doda nazwa klasy:: Przykªad: #include <iostream> using namespace std; class procesor { int l_watkow; int l_rdzeni; int parametry_proc(int wat, int rdz) { l_watkow = wat; l_rdzeni = rdz; void wysw_param(); void procesor::wysw_param() { cout << "\nprocesor posiada " << l_watkow << " watkow"; cout << "\nprocesor posiada " << l_rdzeni << " rdzeni"; main() { procesor i5, i7; cout << "Program przechowuje i wyswietla informacje na temat " << "procesorow\n"; i5.parametry_proc(4, 4); i7.parametry_proc(8, 4); cout << "\n\ti5\n"; i5.wysw_param(); cout << endl; cout << "\n\ti7\n"; i7.wysw_param(); 4
cout << endl; s.wysw(); return 0; Zadanie Stworzyć obiekt postać gry w oparciu o napisaną klasę. Obiekt powinien posiadać podstawowe cechy takie jak: siła, zręczność, magia, intelekt, zdrowie itd. suma punktów poszczególnych cech ma wynosić 100. Można użyć skalowania. 5