To tylko jedna z 24 stron tej notatki. Zaloguj się aby zobaczyć ten dokument.
Zobacz
całą notatkę
Klasy Wykład 4 10/10/25 2 Klasy Definiujemy własne typy danych (klasy) Dodajemy składowe takie jak int , float lub inne klasy Opisujemy zachowanie tworząc tzw. metody, czyli funkcje składowe Definicja klasy class nazwa { ... //ciało klasy }; //ważny jest średnik na końcu Tworzenie obiektów zdefiniowanych przez klasę odbywa się w znany już sposób nowy_typ a; Klasa, a obiekt Klasa to typ obiektu, a nie sam obiekt 10/10/25 3 Składniki klasy Składniki definiujemy w ciele klasy class CPunkt { public: float x; float y; }; Dostęp do składników obiekt.składnik wskaźnik_do_obiektu-składnik (*wskaźnik_do_obiektu).składnik referencja.składnik Przykład cpp_4.1 10/10/25 4 Funkcje składowe Składnikami klas mogą być także funkcje – nazywamy je metodami Metody zwykle pracują na składowych klasy Deklaruje się je w znany już sposób void licz(); float max(float, float); Nazwy deklarowane w klasie mają zakres ważności równy obszarowi całej klasy Klasa nie ma początku ani końca 10/10/25 5 Enkapsulacja Wszystkie elementy klasy zostają zamknięte w jednym kontenerze Jest ona bardzo ważną cechą języka C++, ponieważ odzwierciedla sposób naszego myślenia o obiektach Opisujemy składowe i metody do których możemy się odwoływać na rzecz konkretnych obiektów Możemy używać metod o takich samych nazwach w stosunku do obiektów różnych typów. Nie jest to przeładowywanie nazw, ponieważ mamy różne zakresy nazw 10/10/25 6 Hermetyzacja informacji Składniki i metody zamknięte w klasie mogą być dostępne na zewnątrz, ale NIE MUSZĄ Do określania poziomu dostępu służą etykiety private – oznacza, że składniki i metody są dostępne tylko z wnętrza klasy protected – związane z dziedziczeniem (na razie traktowane jak private ) public – oznacza, że składniki i metody są dostępne zarówno z wnętrza klasy jak i spoza klasy Przykład cpp_4.2 10/10/25 7 Funkcje składowe – definicja Gdzie można zdefiniować funkcje składowe Wewnątrz samej klasy, wtedy automatycznie stają się funkcjami inline Definiuje się je wtedy tak jak zwykłe funkcje Na zewnątrz klasy. W samej klasie funkcje zostają tylko zadeklarowane typ_zwracany nazwa_klasy::funkcja(...) {...} Nie są wtedy inline , ale można je takimi uczynić Przykład cpp_4.3 10/10/25
(…)
… na dołączeniu odpowiedniego przyrostka literowego,
(oznaczającego jej typ) do nazwy zmiennej np. s – oznacza
zmienną zawierającą łańcuch znaków, b – zmienną typu bool,
i – int, itd..
9
Zalecana notacja...
Nazwy plików z kodem źródłowym klas powinny
być takie jak sama nazwa klasy
Punkt.cpp
Punkt.h
Deklaracje przyjaźni umieszczamy na samej górze
Potem umieszczamy instrukcja typedef
Metody…
… jakiegoś typu
należy odczytywać ten sam typ
Przykład cpp_4.13
10/10/25
23
Pola bitowe
Pola bitowe to specjalny typ składnika klasy polegający
na tym, iż dane przechowywane są na określonej
liczbie bitów
class CPort{
unsigned int read : 1;
unsigned int status : 2;
};
Raczej nie stosuje się, chyba że w specjalnych
sytuacjach, gdzie konieczne jest duże upakowanie
danych lub obsługa specjalistycznej…
… jest jedną z najczęściej
przeładowywanych funkcji
Konstruktor nie jest obowiązkowy
Konstruktor nic nie zwraca
10/10/25
Nawet void!!!
12
Destruktor
Destruktor jest również specjalną funkcją
składową klasy
Jest przeciwieństwem konstruktora
Jest uruchamiany automatycznie tak jak
konstruktor, ale przy likwidowaniu obiektu
Służy np. do zwalniania pamięci
Destruktor nazywa się tak jak nazwa klasy z tą
różnicą, że poprzedzona jest znakiem ‘~’
Destruktor również nie jest obowiązkowy
Destruktor nic nie zwraca
Nawet void!!!
Przykład cpp_4.5
10/10/25
13
Składnik statyczny
Składnik statyczny jest użyteczny kiedy chcemy, aby
poszczególne obiekty danej klasy posługiwały się tą samą daną
Taka dana jest tworzona w pamięci jednokrotnie i istnieje nawet
jeśli nie ma ani jednego obiektu…
… klasy mimo iż nie
jest składnikiem tej klasy
Funkcja może być przyjacielem więcej niż jednej
klasy
Dzięki funkcjom zaprzyjaźnionym możemy dawać
dostęp do zmiennych prywatnych funkcjom, które nie
mogłyby być funkcjami składowymi
Do funkcji zaprzyjaźnionej nie jest przesyłany
wskaźnik this
Deklaracja funkcji zaprzyjaźnionej
friend typ nazwa (...);
Miejsce deklaracji nie ma znaczenia (private…
... zobacz całą notatkę
Komentarze użytkowników (0)