Programowanie obiektowe III rok EiT dr inż. Jerzy Kotowski Wykład IX.

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

C++ wykład 4 ( ) Przeciążanie operatorów.
Wstęp do programowania
Programowanie obiektowe
Kurs języka C++ Paweł Rzechonek Instytut Informatyki
C++ Paweł Rzechonek Instytut Informatyki Uniwersytetu Wrocławskiego
Programowanie obiektowe PO PO - LAB 2 Wojciech Pieprzyca.
Deklaracje i definicje klas w C++ Składowe, pola, metody Konstruktory
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 4 Wojciech Pieprzyca.
Programowanie obiektowe
Programowanie obiektowe PO PO - LAB 3 Wojciech Pieprzyca.
Wzorce.
Język ANSI C Funkcje Wykład: Programowanie komputerów
Wprowadzenie.
Static, const, volatile.
Programowanie w środowisku sieciowym
Programowanie obiektowe w Javie
OOPC++ - wstêp, klasy1 Klasy Do struktury można dołączyć operacje działające na jej polach. struct date { int day, month, year; void set (int d, int m,
Praktyka Programowania Semestr I: –wykład - 1 godz. –laboratorium - 1 godz. –projekt - 1 godz.
Struktury.
C++ wykład 5 ( ) Dziedziczenie.
C++ wykład 6 ( ) Polimorfizm.
C++ wykład 2 ( ) Klasy i obiekty.
Zasady zaliczenia Warunki uzyskania zaliczenia:
Klasy w C++. Deklaracja klasy class NazwaTwojejKlasy { //w tym miejscu piszemy definicje typów, //zmienne i funkcje jakie mają należeć do klasy. }; //tutaj.
Programowanie obiektowe III rok EiT
Programowanie obiektowe III rok EiT
Programowanie obiektowe III rok EiT
Podstawy programowania
Podstawy programowania II
T: Różnice pomiędzy programowaniem strukturalnym a obiektowym
Jerzy F. Kotowski1 Informatyka I Wykład 11 STRUKTURY I UNIE.
Podstawy Programowania
Programowanie obiektowe III rok EiT
Programowanie obiektowe III rok EiT dr inż. Jerzy Kotowski Wykład VIII.
Jerzy F. Kotowski1 Informatyka I Wykład 14 DEKLARATORY.
Programowanie obiektowe III rok EiT dr inż. Jerzy Kotowski Wykład XIII.
Programowanie obiektowe III rok EiT
Programowanie obiektowe III rok EiT
Java – coś na temat Klas Piotr Rosik
Inicjalizacja i sprzątanie
Wykonał: Michał Nikołajuk
Programowanie obiektowe
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Programowanie obiektowe Wykład 7 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/20 Dariusz Wardowski.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
Podstawy informatyki 2013/2014
Programowanie obiektowe – język C++
Programowanie obiektowe 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Prasek Aneta, Skiba Katarzyna. Funkcje stałe const to takie funkcje, które nie mogą modyfikować stanu obiektu. Oznacza to, że funkcja stała nie może zmieniać.
Kurs języka C++ – wykład 3 ( )
Kurs języka C++ – wykład 8 ( )
Programowanie w języku C++
Kurs języka C++ – wykład 5 ( )
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++
Programowanie strukturalne i obiektowe C++ Przeładowanie operatorów Robert Nowak.
Kurs języka C++ – wykład 4 ( )
K URS JĘZYKA C++ – WYKŁAD 1 ( ) Łagodne wprowadzenie do języka C++
K URS JĘZYKA C++ – WYKŁAD 2 ( ) Klasy i obiekty.
K URS JĘZYKA C++ – WYKŁAD 6 ( ) Polimorfizm.
Programowanie obiektowe Wykład 9 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/15 Dariusz Wardowski.
Wykład 5 Klasa Vec i jej operatory 1.Kategorie operatorów 2.Operatory ogólne - przykłady 3.Operatory specjalne [ ], ( ) oraz –> 4.Operatory new i delete.
Podstawy informatyki Struktury Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Asocjacja,Kompozycja,Agregacja
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
Programowanie Obiektowe – Wykład 6
Programowanie Obiektowe – Wykład 2
Kurs języka C++ – wykład 4 ( )
Zapis prezentacji:

Programowanie obiektowe III rok EiT dr inż. Jerzy Kotowski Wykład IX

Program wykładu Język C++ –Klasy, c.d. Składowa statyczna klasy Wskaźniki do składowych klasy Funkcje składowe z atrybutem const Przykład problemu Podstawy języka JAVA Klasówka

Literatura C++ for C programmers, Ira Pohl, The Benjamin/Cummings Publishing Company, Inc. Symfonia C++, Jerzy Grębosz, Oficyna Kallimach, Kraków 1999 Borland C++ 4, Nabajyoti Barkakati, Oficyna Wydawnicza README, Warszawa 1995

Składowa statyczna klasy Data members mogą być deklarowane z modyfikatorem static. W kontekście ze słowem kluczowym static nie można używać auto, register lub extern. Składnik static jest zakładany raz na klasę. Statyczna może być również funkcja składowa. class String { …………… static Stan; public: static void switch_stan(void); …………… }; Składowa statyczna nie może odnosić się do niestatycznych składowych klasy (bo może ich po prostu nie być). Słowo static może się pojawić tylko wewnątrz definicji klasy: void String::switch_stan(void)// Definicja funkcji poza klasą {…}

Składowa statyczna klasy – c.d... \test0.sln.. \test0.sln String static.cpp Statyczną składową należy zdefiniować poza klasą. Wewnątrz klasy jest tylko deklaracja: int String::Stan = 0; Składowa statyczna może być private. Inicjalizacja tej składowej powyższą techniką jest wtedy możliwa tylko raz. Definicja funkcji statycznej może być wewnątrz klasy ( inline ) lub poza klasą: void String::switch_stan(void) { cout << "\nStan = "; cout << (Stan? "gadamy.": "siedzimy cicho."); cout << " Zmiana? (t/n) "; int p = getche(); if(p == 't' || p == 'T') Stan ^= 1;// ciekawostka: przełączanie 0-1 cout << endl; }

Interesujące elementy programu Priorytety operatorów: void print(){if (Stan) {cout << s << "\nLenght: " << len << "\n";} else cout <<"\n??";} Definicja statycznej składowej prywatnej: int String::Stan = 0; Operator trójargumentowy: cout << (Stan? "gadamy.": "siedzimy cicho."); Przełączanie wartości zmiennej binarnej: Stan ^= 1; Wywołanie poprzez nazwę klasy: String::switch_stan(); Wywołanie poprzez obiekt: one.switch_stan(); Wywołanie poprzez adres do obiektu: p->switch_stan(); A variable declared static in a function retains (zachowuje) its state between calls to that function: static char three[40]…

Klasa punkt..\..\Visual Studio Projects\test0\test0.sln..\..\Visual Studio Projects\test0\test0.sln Idea: Chcemy dysponować informacją o liczbie obiektów Sposób: statyczna składowa klasy i statyczna funkcja składowa punkt.cpp Przy okazji: –Pojawi się konstruktor z domniemanymi argumentami –Konstruktor i destruktor będą modyfikować składową statyczną klasy –Gadający konstruktor i destruktor pozwolą obserwować niejawne działania programu –Aby to móc obserwować w destruktorze pojawi się wywołanie funkcji getch() Komfort: nie musimy pamiętać o wielu rzeczach, które są bardzo ważne dla poprawnej pracy programu. Ma to miejsce przy dynamicznej rezerwacji pamięci.

Wskaźniki do składowych klasy Klasyczny wskaźnik zawiera adres bezwzględny obiektu. Pokazujemy na coś bezpośrednio palcem (J. Grębosz) i mówimy: naciśnij na to coś. wsk jest wskaźnikiem do funkcji o argumentach typu int oraz long zwracającej wartość typu float. class complex { public: float Re, Im; void print(void); }x; float *p = &x.Re; float (*wsk)(int,long); Wskaźnik do składowej klasy: To jest hamulec (pokazujemy hamulec na rysunku technicznym). Naciśnij na hamulec. Idea: wiemy gdzie jest hamulec w samochodzie. Jedziemy jakimś samochodem (tzn. obiektem klasy samochód). Wiemy gdzie ten konkretny obiekt (egzemplarz pojęcia) ma hamulec w oparciu o znajomość schematu technicznego tego typu samochodu (tzn. tego typu obiektowego).

Wskaźniki do składowych klasy c.d. Definicja wskaźnika ( K jest nazwą klasy): type_name K::*wsk ; Inicjalizacja: type_name K::*wsk = & K::składnik_klasy; Przykład: float complex::*pk = &complex::Re; Użycie: x.*pk = 1; Analogia: obiekt znany przez adres. To jest antena (pokazujemy anteną na rysunku technicznym). Odkręć anteną z samochodu przed domem. Przykład użycia complex *w_o = &x; float complex::*pl = &complex::Im; w_o->*pl = -1; Uwaga! Nie jest to sposób na obejście reguł dostępu do składowych. Nie można zdefiniować wskaźnika do składowej, która nie ma swojej nazwy (na przykład do elementu tablicy, będącej składową klasy). Nowe operatory C++:.* oraz ->* Priorytet 14.

Wskaźniki do funkcji składowych Wskaźnik do funkcji składowej: type_name (K::*wsk_f)(type1,...); Przykład: void (complex::*wsk_f)(void) = complex::print; Użycie - poprzez nazwę obiektu: (x.*wsk_f)(); Użycie - poprzez adres obiektu (w_o->*wsk_f)(); Uwaga na nawiasy!!! Co to jest? float complex::*t_w[2]; t_w jest dwuelementową tablicą adresów do składowych typu float w klasie complex Użycie: t_w[0]=&complex::Re; Co to jest? void (complex::*wf[2])(void); wf jest dwuelementową tablicą wskaźników do funkcji składowych typu void-void w klasie complex Użycie: void (complex::*wf[2])(void) = {NULL, complex::print}; (x.*t_wsk_f[1])();

Wskaźniki do składowych statycznych Składnia definiowania i używania wskaźników do składowych klas nie dotyczy statycznych składowych. Wskaźnik do statycznej składowej jest traktowany tak jak zwykły składnik. Przykład 1: class CLock { public: static double tick_per_sec; // … double *p_tick= &Clock::tick_per_sec; Użycie: *p_tick=18.2; Przykład 2: void (*wsk_f)(void) = String::switch_stan; Użycie: ( *wsk_f)();

Modyfikator const - możliwości Słowo kluczowe const poprzedzające nazwę zmiennej wskazuje, że ta zmienna jest stałą i nie może być modyfikowana w programie. Jeżeli argumentem funkcji jest wskaźnik zadeklarowany jako jako const, to funkcja nie może zmieniać zawartości wskazywanej przez ten wskaźnik: size_t strlen( const char *string ); typedef _W64 unsigned int size_t; Inicjalizacja pól klas z atrybutem const : class Ala { const int z[3]; }Ula[2]={{{1,3,4}},{{3,2,5}}}; Inicjalizacja jest możliwa tylko w linii definicji klasy. Potem jest już za późno. Inicjalizacji pól typu const nie można już dokonać w konstruktorze. Za późno.

Funkcje składowe z atrybutem const Jeżeli funkcja składowa nie zmienia danych klasy, można ją zadeklarować jako const (z atrybutem const ). class String { private: int len; // … public: int length(void) const; // … }; … int String::length(void) const { return len; }

Przykład..\..\Visual Studio Projects\test0\test0.sln..\..\Visual Studio Projects\test0\test0.sln punkt1.cpp Konstruktor i destruktor wywołują funkcję print z atrybutem const. Funkcje set i move pozwalają na ustawianie i przesuwanie punktów. Funkcje te mają domniemane argumenty. Domniemane argumenty są w deklaracjach. W segmencie main są trzy obiekty z modyfikatorem const A[n] - tablica obiektów typu punkt Tablica wskaźników do funkcji składowych z argumentami: void (punkt::*p_f1[2])(int,int) = {punkt::set, punkt::move}; Generacja losowa parametrów. Funkcje rand i srand Wskaźnik do funkcji składowej z atrybutem const : void (punkt::*p_f)(void) const = punkt::print; Widać, że obiekty są usuwane w kolejności odwrotnej do zakładania. Proces zwalniania pamięci jest dokonywany w epilogu do programu.