ATD. Wykład 8. Programowanie (język C++) abstrakcyjny typ danych. Abstrakcyjne typy danych (ATD) Metody czysto wirtualne. Definicje i uwagi:

Wielkość: px
Rozpocząć pokaz od strony:

Download "ATD. Wykład 8. Programowanie (język C++) abstrakcyjny typ danych. Abstrakcyjne typy danych (ATD) Metody czysto wirtualne. Definicje i uwagi:"

Transkrypt

1 Programowanie (język C++) Wykład 8. ATD abstrakcyjny typ danych Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Metody czysto wirtualne Metody czysto wirtualne otrzymujemy inicjalizując je w klasie bazowej wartością 0, n.p.: class Class. virtual double Metoda ( ) = 0;. ; // Metoda jest czysto wirtualna Definicje i uwagi: Abstrakcyjne typy danych (ATD) 1. Klasa, w której zadeklarowano przynajmniej jedną metodę czysto wirtualną, nazywa się abstrakcyjnym typem danych (ATD). 2. Tworzenie obiektów klasy, która jest ATD, jest zabronione (ale wolno tworzyć wskaźniki i referencje do tej klasy). 3. ATD jest z załoŝenia przeznaczony do wykorzystania jako baza do definiowania klas pochodnych. 4. JeŜeli klasa pochodna nie nadpisuje (nie konkretyzuje) metody czysto wirtualnej, to teŝ jest ATD. 5. Metoda czysto wirtualna moŝe mieć w klasie bazowej implementację, z której mogą korzystać klasy pochodne. Istnienie takiej implementacji nie zmienia statusu "abstrakcyjności" klasy bazowej i wszystkich jej kolejnych pochodnych, aŝ do pochodnej, która metodę konkretyzuje. Tomasz Marks - Wydział MiNI PW -3- Tomasz Marks - Wydział MiNI PW -4-

2 Przykład ATD (1) class Zwierz const char* Imie; Zwierz ( const char * ); virtual void DajGłos ( ) = 0; // metoda DajGłos jest czysto wirtualna ; Zwierz :: Zwierz ( const char* im ) : Imie ( im ) void Zwierz :: DajGłos ( ) cout << endl << Imie << " się odzywa: "; class Pies : public Zwierz Pies ( const char * ); ; Przykład ATD (2) Pies :: Pies ( const char* im ) : Zwierz ( im ) void Pies :: DajGłos ( ) Zwierz::DajGłos( ); cout << "Hau! Hau!" << endl; Tomasz Marks - Wydział MiNI PW -5- Tomasz Marks - Wydział MiNI PW -6- class Kot : public Zwierz Kot ( const char * ); ; Przykład ATD (3) class Mysz : public Zwierz Mysz ( const char * ); ; Przykład ATD (4) Kot :: Kot ( const char* im ) : Zwierz ( im ) void Kot :: DajGłos ( ) Zwierz :: DajGłos( ); cout << "Miauuuuuuu" << endl; Mysz :: Mysz ( const char* im ) : Zwierz ( im ) void Mysz :: DajGłos ( ) Zwierz :: DajGłos( ); cout << "3.14, 3.14, 3.14" << endl; Tomasz Marks - Wydział MiNI PW -7- Tomasz Marks - Wydział MiNI PW -8-

3 Przykład ATD (5) int main ( ) //Zwierz ssak( "Rex" ); // BŁĄD! Zwierz jest ATD Pies P( "Azor" ); Kot K( "Mruczek" ); Mysz M( "Miki" ); P.DajGłos( ); // Azor się odzywa: Hau! Hau! K.DajGłos( ); // Mruczek się odzywa: Miauuuuuuu M.DajGłos( ); // Miki się odzywa: 3.14, 3.14, 3.14 Zoo[ 0 ] = &P; Zoo[ 1 ] = &K; Zoo[ 2 ] = &M; for ( int i = 0; i < 3; ++i ) Zoo[ i ] -> DajGłos( ); // Azor się odzywa: Hau! Hau! // Mruczek się odzywa: Miauuuuuuu // Miki się odzywa: 3.14, 3.14, 3.14 Przykład ATD (1a) class Zwierz const char* Imie; Zwierz ( const char *); virtual const char* Co ( ) = 0; // metoda Co jest czysto wirtualna virtual void DajGłos ( ) = 0; // metoda DajGłos jest czysto wirtualna ; Zwierz :: Zwierz ( const char* im ) : Imie ( im ) void Zwierz :: DajGłos ( ) cout << endl << Co( ) << Imie << " się odzywa: "; Tomasz Marks - Wydział MiNI PW -9- Tomasz Marks - Wydział MiNI PW -10- Przykład ATD (2a) struct Pies : public Zwierz const char* siersc; Pies ( const char *, const char* ); const char* Co ( ); ; Pies :: Pies ( const char* im, const char* s ) : Zwierz ( im ), siersc ( s ) const char* Pies :: Co ( ) return "pies"; void Pies :: DajGłos ( ) Zwierz :: DajGłos( ); cout << "Hau! Hau!" << endl; Tomasz Marks - Wydział MiNI PW -11- Przykład ATD (3a) struct Kot : public Zwierz const char* kolor; Kot ( const char*, const char* ); const char* Co ( ); ; Kot :: Kot ( const char* im, const char* kol ) : Zwierz ( im ), kolor ( kol ) const char* Kot :: Co ( ) return "kot"; void Kot :: DajGłos ( ) Zwierz :: DajGłos( ); cout << "Miauuuuuuu" << endl; Tomasz Marks - Wydział MiNI PW -12-

4 struct Mysz : public Zwierz int ogon; // [cm] Mysz ( const char*, int ); const char* Co ( ); ; Przykład ATD (4a) Mysz :: Mysz ( const char* im, int og ) : Zwierz ( im ), ogon( og ) const char* Mysz :: Co ( ) return "mysz"; void Mysz :: DajGłos ( ) Zwierz :: DajGłos( ); cout << "3.14, 3.14, 3.14" << endl; Tomasz Marks - Wydział MiNI PW -13- int main ( ) Pies P( "Azor", "krótka" ); Kot K( "Mruczek", "bury" ); Mysz M( "Miki", 10 ); Przykład ATD (5a) Zoo[ 0 ] = &P; Zoo[ 1 ] = &K; Zoo[ 2 ] = &M; for ( int i = 0; i < 3; ++i ) Zoo[ i ] -> DajGłos( ); switch ( * ( Zoo[ i ] -> Co( ) ) ) case 'p':... ( (Pies*) Zoo[ i ] ) -> siersc... case 'k':... ( (Kot*) Zoo[ i ] ) -> kolor... case 'm':... ( (Mysz*) Zoo[ i ] ) -> ogon << "cm"... Tomasz Marks - Wydział MiNI PW -14- DYNAMICZNA KONTROLA TYPU Tomasz Marks - Wydział MiNI PW -15- Przykład ATD (6a) Wirtualna metoda Co( ) umoŝliwiła nam zidentyfikowanie konkretnego typu obiektu dostępnego za pomocą wskaźnika klasy bazowej: for ( int i = 0; i < 3; ++i ) Zoo[ i ]->DajGłos( ); switch ( *Zoo[i]->Co( ) ) case 'p': cout << "sierść " << ((Pies*) Zoo[ i ]) -> siersc; break; case 'k': cout << "kolor " << ((Kot*) Zoo[ i ]) -> kolor; break; case 'm': cout << "ogon " << ((Mysz*) Zoo[ i ]) -> ogon << "cm"; // pies Azor się odzywa: Hau! Hau! // sierść krótka // kot Mruczek się odzywa: Miauuuuuuu // kolor bury // mysz Miki się odzywa: 3.14, 3.14, 3.14 // ogon 10cm Tomasz Marks - Wydział MiNI PW -16-

5 Przykład ATD (6b) Ten sam cel moŝe być osiągnięty przez uŝycie operatora typeid, chociaŝ w tym przypadku nie będzie moŝliwe zastosowanie instrukcji switch: for ( int i = 0; i < 3; ++i ) Zoo[ i ]->DajGłos( ); if ( typeid( *Zoo[ i ] ) == typeid( Pies ) ) cout << "siersc: " << ((Pies*)Zoo[ i])->siersc; else if ( typeid( *Zoo[ i ] ) == typeid( Kot ) ) cout << "kolor: " << ((Kot*)Zoo[ i ])->kolor; else if ( typeid( *Zoo[ i ] ) == typeid( Mysz ) ) cout << "ogon: " << ((Mysz*)Zoo[ i ])->ogon << "cm"; // pies Azor się odzywa: Hau! Hau! // sierść krótka // kot Mruczek się odzywa: Miauuuuuuu // kolor bury // mysz Miki się odzywa: 3.14, 3.14, 3.14 // ogon 10cm Tomasz Marks - Wydział MiNI PW -17- Operator typeid Gdybyśmy chcieli opisać operator typeid jako funkcję, to potrzebne by były następujące deklaracje: class type_info; const type_info& typeid ( NazwaTypu ); const type_info& typeid ( WyraŜenie ); gdzie type_info jest typem zdefiniowanym w bibliotece standardowej ( <typeinfo> ). Dokładniej naleŝałoby napisać: class type_info; const type_info& typeid ( NazwaTypu ) throw( ); const type_info& typeid ( WyraŜenie ) throw ( bad_type ); ale jeszcze nie znamy obsługi wyjątków, więc te szczegóły wyjaśnimy później. Tomasz Marks - Wydział MiNI PW -18- Klasa type_info w znacznej mierze zaleŝy od implementacji, ale główne aspekty zawiera poniŝsza specyfikacja: class type_info virtual ~type_info( ); // jest polimorficzne int operator== ( const type_info& ) const; // moŝna porównywać int operator!= ( const type_info& ) const; int before(const type_info& rhs) const; // porządek const char* name( ) const; // nazwa typu... private: type_info( const type_info& ); // kopiowanie zabronione type_info& operator= ( const type_info& );... ; Przykład ATD (1b) Z punktu widzenia procesu projektowania hierarchii klas, zarówno wykorzystanie metody Co( ) jak i operatora typeid nie jest eleganckie ( patrz Stroustrup [1] str. 464 ). PrzecieŜ ten sam cel moŝna osiągnąć wprowadzając metodę wirtualną Opis( ): class Zwierz const char* Imie; Zwierz ( const char *); virtual const char* Co ( ) = 0; virtual void DajGłos ( ) = 0; // metoda DajGłos jest czysto wirtualna virtual void Opis ( ) = 0; // kolejna metoda czysto wirtualna ; const char* Pies :: Opis ( ) cout << "sierść" << siersc; const char* Kot :: Opis ( ) cout << "kolor " << kolor; const char* Mysz :: Opis ( ) cout << "ogon " << ogon << "cm"; Tomasz Marks - Wydział MiNI PW -19- Tomasz Marks - Wydział MiNI PW -20-

6 Metoda Opis( ) pozwala napisać: Przykład ATD (6c) for ( int i = 0; i < 3; ++i ) Zoo[ i ]->DajGłos( ); Zoo[ i ]->Opis( ); // pies Azor się odzywa: Hau! Hau! // sierść krótka // kot Mruczek się odzywa: Miauuuuuuu // kolor bury // mysz Miki się odzywa: 3.14, 3.14, 3.14 // ogon 10cm WIRTUALNY DESTRUKTOR Tomasz Marks - Wydział MiNI PW -21- Tomasz Marks - Wydział MiNI PW -22- Przykład ATD (1b) śeby prześledzić proces destrukcji zdefiniujemy destruktor w klasie bazowej class Zwierz const char* Imie; Zwierz ( const char *); ~Zwierz ( ); virtual const char* Co ( ) = 0; virtual void DajGłos ( ) = 0; virtual void Opis ( ) = 0; ; Zwierz::~Zwierz( ) cout << endl << "o imieniu " << Imie << endl; i analogicznie dla klas pochodnych: Pies::~Pies( ) cout << endl << "Znika pies"; Kot::~Kot( ) cout << endl << "Znika kot"; Mysz::~Mysz( ) cout << endl << "Znika mysz"; Tomasz Marks - Wydział MiNI PW -23- int main ( ) Pies P( "Azor", "krótka" ); Kot K( "Mruczek", "bury" ); Mysz M( "Miki", 10 ); Przykład ATD (5a) Zoo[ 0 ] = &P; Zoo[ 1 ] = &K; Zoo[ 2 ] = &M; // Znika mysz // o imieniu Miki // Znika kot // o imieniu Mruczek // Znika pies // o imieniu Azor Tomasz Marks - Wydział MiNI PW -24-

7 int main ( ) Przykład ATD (5d) int main ( ) Przykład ATD (5e) Zoo[ 0 ] = new Pies( "Azor", "krótka" ); Zoo[ 1 ] = new Kot( "Mruczek", "bury" ); Zoo[ 2 ] = new Mysz M( "Miki", 10 ); Zoo[ 0 ] = new Pies( "Azor", "krótka" ); Zoo[ 1 ] = new Kot( "Mruczek", "bury" ); Zoo[ 2 ] = new Mysz M( "Miki", 10 ); for ( int i=0; i<3; ++i ) delete Zoo[ i ]; Oczywiście teraz, jeśli nie spróbujemy usunąć obiektów, to destruktory się "nie odezwą". // o imieniu Azor // o imieniu Mruczek // o imieniu Miki Jak widać, uruchamiany będzie tylko destruktor zdefiniowany w klasie bazowej. Tomasz Marks - Wydział MiNI PW -25- Tomasz Marks - Wydział MiNI PW -26- Przykład ATD (1b) Aby spowodować uruchamianie destruktorów klas pochodnych, trzeba zdefiniować destruktor klasy bazowej jako wirtualny: class Zwierz const char* Imie; Zwierz ( const char *); virtual ~Zwierz ( ); virtual const char* Co ( ) = 0; virtual void DajGłos ( ) = 0; virtual void Opis ( ) = 0; ; Zwierz::~Zwierz( ) cout << endl << "o imieniu " << Imie << endl; w klasach pochodnych bez zmian: Pies::~Pies( ) cout << endl << "Znika pies"; Kot::~Kot( ) cout << endl << "Znika kot"; Mysz::~Mysz( ) cout << endl << "Znika mysz"; W efekcie otrzymamy: int main ( ) Przykład ATD (5e) Zoo[ 0 ] = new Pies( "Azor", "krótka" ); Zoo[ 1 ] = new Kot( "Mruczek", "bury" ); Zoo[ 2 ] = new Mysz M( "Miki", 10 ); for ( int i=0; i<3; ++i ) delete Zoo[ i ]; // Znika pies // o imieniu Azor // Znika kot // o imieniu Mruczek // Znika mysz // o imieniu Miki Tomasz Marks - Wydział MiNI PW -27- Tomasz Marks - Wydział MiNI PW -28-

8 Przeciwdziałanie błędom wykonania programu (1) OBSŁUGA WYJĄTKÓW double& Vector :: operator [ ] ( int i ) return V[ i ]; // operacja niebezpieczna!!! double& Vector :: operator [ ] ( int i ) if ( i >= 0 && i < Size ) return V[ i ]; DisplayMessage( "komunikat o błędzie" ); // fukcja systemowa lub własna exit(1); // funkcja standardowa double& Vector :: operator [ ] ( int i ) assert ( i >= 0 && i < Size ) // makro assert return V[ i ]; double& Vector :: operator [ ] ( int i ) if ( i < 0 i >= Size ) throw xcp_scope( i ); // odrzucenie wyjątku return V[ i ]; Tomasz Marks - Wydział MiNI PW -29- Tomasz Marks - Wydział MiNI PW -30- Przeciwdziałanie błędom wykonania programu (2) // vector.h struct xcp_memory ; // zewnętrzna (wzgl. Vector) klasa pomocnicza class Vector int Size, Nr; double *V; static int DefSize, VCounter; void Init ( int = 0, double = 0, double * = 0 ); Vector ( ); Vector ( int size, double val = 0 ); Vector ( int size, double arr[ ] );. struct xcp_scope // wewnętrzna (w Vector) klasa pomocnicza int index; xcp_scope ( int ); ;. ; Przeciwdziałanie błędom wykonania programu (3) // vector.cpp // implementacja konstruktora klasy xcp_scope Vector :: xcp_scope :: xcp_scope ( int i ) : index ( i ) // metoda prywatna (wersja oryginalna) void Vector :: Init ( int s, double val, double tab[ ] ) Nr = ++VCounter; if ( s <= 0 ) s = DefSize; V = new double [ s ]; if (! V ) Size = 0; return; Size = s; for ( s = 0; s < Size; ++s ) V [ s ] = tab? tab [ s ] : val; Tomasz Marks - Wydział MiNI PW -31- Tomasz Marks - Wydział MiNI PW -32-

9 Przeciwdziałanie błędom wykonania programu (4) // metoda prywatna (wersja zmodyfikowana) void Vector :: Init ( int s, double val, double tab[ ] ) if ( VCounter > 7 ) throw "Za duzo wektorow!"; Nr = ++VCounter; if ( s < 0 ) throw "Blad konstrukcji!"; if ( s <= 0 ) s = DefSize; try V = new double [ s ]; catch ( ) throw xcp_memory ( ); if (! V ) throw xcp_memory ( ); Size = s; for ( s = 0; s < Size; ++s ) V [ s ] = tab? tab [ s ] : val; Przeciwdziałanie błędom wykonania programu (5) #include "vector.h" void main ( ) Vector w( 4 ); for ( int i = -1; i < 7; i++ ) try cout << endl << "i = " << i << " "; Vector z( i ); w[ i ] = i; cout << "w[" << i << "] = " << w[ i ]; catch ( const char * str ) cout << str; catch ( xcp_memory ) cout << "Brak pamieci"; catch ( Vector :: xcp_scope ex ) cout << "Odrzucono indeks " << ex.index; Tomasz Marks - Wydział MiNI PW -33- Tomasz Marks - Wydział MiNI PW -34- Przeciwdziałanie błędom wykonania programu (6) Program wyświetli: i = -1 Blad konstrukcji! i = 0 w[ 0 ] = 0 i = 1 w[ 1 ] = 1 i = 2 w[ 2 ] = 2 i = 3 w[ 3 ] = 3 i = 4 Odrzucono indeks 4 i = 5 Odrzucono indeks 5 i = 6 Za duzo wektorow! 1. Składnia instrukcji try-catch: Obsługa wyjątków [1] try // początek bloku try... // koniec bloku try catch (.. ) // 1. blok catch catch (.. ) // 2. blok catch... catch (.. ) // ostatni blok catch blok try wraz ze wszystkimi następującymi po nim blokami catch stanowi składniowo jedną całość, którą nazywamy instukcją try-catch Tomasz Marks - Wydział MiNI PW -35- Tomasz Marks - Wydział MiNI PW -36-

10 Obsługa wyjątków [2] Obsługa wyjątków [3] 2. Bloki catch są nazywane procedurami obsługi wyjątków. 3. KaŜda procedura obsługi wyjątków ma określony typ sytuacji wyjątkowej, która ją aktywizuje. 4. Zgłoszenie sytuacji wyjątkowej (throw) podczas wykonywania bloku try skutkuje przekazaniem pewnego obiektu do odpowiedniej procedury obsługi. 5. Dopasowanie wyraŝenia throw do procedury obsługi polega na porównaniu typu wartości wyraŝenia throw z typami ( parametrów ) określonymi dla kolejnych procedur obsługi. 6. Dopasowanie uznane będzie za pomyślne, jeŝeli spełniony zostanie jeden z trzech warunków: (i) oba typy są ściśle zgodne; (ii) typ określony dla parametru procedury obsługi jest publiczną klasą bazową klasy obiektu będącego wartością wyraŝenia throw; (iii) moŝliwe jest standardowe przekształcenie typu wartości wyraŝenia throw, będącej wskaźnikiem, na typ wskaźnikowy parametru procedury. Po pozytywnym rozpoznaniu jednego z warunków (i), (ii), (iii), dalsze frazy catch nie będą analizowane. Tomasz Marks - Wydział MiNI PW -37- Tomasz Marks - Wydział MiNI PW -38- Obsługa wyjątków [4] 7. JeŜeli dopasowanie nie da pozytywnego rezultatu, t.zn. Ŝadna procedura catch nie zostanie uruchomiona, to dana instrukcja try-catch będzie uznana za zakończoną i nastąpi sprawdzenie, czy w aktualnie wykonywanej funkcji jest blok try zawierający daną instukcję try-catch. JeŜeli taki blok istnieje, to wykonana zostanie próba dopasowania rozpatrywanygo wyjątku do występujących po nim procedur obsługi. JeŜeli taki blok nie istnieje, to wykonanie funkcji zostanie zakończone i odpowiedni blok będzie poszukiwany w funkcji wywołującej tę, w której został odrzucony wyjątek itd. itd. W skrajnym przypadku, jeŝeli dopasowanie nie zostanie zrealizowane w obrębie funkcji main(), obsługę wyjątku przejmie systemowa procedura obsługi wyjątków, która wyświetli odpowiedni komunikat i zakończy działanie programu. Obsługa wyjątków [5] 8. Zapis procedury obsługi nie musi zawierać nazwy przyjmowanego obiektu (parametru). Nazwa jest konieczna jedynie w sytuacji, gdy zachodzi rzeczywista potrzeba uŝycia wartości tego parametru. 9. Trzykropek pozwala określić procedurę wychwytującą wyjątki wszystkich typów. 10. Wewnątrz procedury obsługi (catch) moŝna uŝyć frazy throw z pustym wyraŝeniem throw; Skutkuje to przekazaniem wyjątku do zewnętrznego bloku try. W innych kontekstach uŝycie pustego wyraŝenia throw jest błędem. Tomasz Marks - Wydział MiNI PW -39- Tomasz Marks - Wydział MiNI PW -40-

11 Obsługa wyjątków [6] 11. Deklaracja funkcji moŝe zawierać klauzulę, która stanowi ograniczenie zbioru sytuacji wyjątkowych zgłaszanych bezpośrednio lub pośrednio przez tę funkcję: void fun1 (.. ); // moŝe zgłaszać dowolne wyjątki long fun2 (.. ) throw (const char*, xcp_scope&); // moŝe zgłaszać wyjątki wymienionych typów double fun3 (.. ) throw ( ); // nie moŝe zgłaszać Ŝadnych wyjątków Naruszenie zadeklarowanej specyfikacji spowoduje błąd wykonania programu. Koniec wykładu Klauzula ograniczenia zbioru sytuacji wyjątkowych nie jest uwaŝana za element określenia typu funkcji ( tzn. nie wchodzi w skład deskryptora funkcji ). Tomasz Marks - Wydział MiNI PW -41- Tomasz Marks - Wydział MiNI PW -42-

Programowanie 2. Język C++. Wykład 3.

Programowanie 2. Język C++. Wykład 3. 3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane

Bardziej szczegółowo

Programowanie 2. Język C++. Wykład 9.

Programowanie 2. Język C++. Wykład 9. 9.1 Ukrywanie metod, metody nadpisane... 1 9.2 Metody wirtualne, wirtualny destruktor... 2 9.3 Metody czysto wirtualne... 6 9.4 Klasy abstrakcyjne... 7 9.5 Wielodziedziczenie... 9 9.1 Ukrywanie metod,

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.: Program przedmiotu Programowanie (język C++) Wykład 1. Język C a C++. Definiowanie prostych klas. Typy referencyjne. Domyślne wartości argumentów. PrzeciąŜanie funkcji. Konstruktory, destruktory. Definiowanie

Bardziej szczegółowo

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania

Bardziej szczegółowo

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład V - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Programowanie obiektowe Dziedziczenie (inheritance) - mechanizm

Bardziej szczegółowo

Wyjątki (exceptions)

Wyjątki (exceptions) Instrukcja laboratoryjna nr 6 Programowanie w języku C 2 (C++ poziom zaawansowany) Wyjątki (exceptions) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp Wyjątki (ang.

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Zaawansowane programowanie w języku C++ Programowanie obiektowe Zaawansowane programowanie w języku C++ Programowanie obiektowe Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka

Bardziej szczegółowo

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.: Program przedmiotu Programowanie Obiektowe (język C++) Wykład 1. Definiowanie prostych klas. Przykłady. Przypomnienie: typy referencyjne, domyślne wartości argumentów, przeciąŝanie funkcji. Konstruktory,

Bardziej szczegółowo

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji

Bardziej szczegółowo

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019 Wykład 3 22 marca 2019 Klasy wewnętrzne Klasa wewnętrzna class A {... class B {... }... } Klasa B jest klasa wewnętrzna w klasie A. Klasa A jest klasa otaczajac a klasy B. Klasy wewnętrzne Właściwości

Bardziej szczegółowo

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50. Programowanie (język C++) referencje Wykład 2. Referencje (1) Referencja (odnośnik) jest zmienną identyfikującą inną zmienną. Wykonanie operacji na referencji ma taki sam skutek, jak wykonanie tejŝe operacji

Bardziej szczegółowo

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy 2.4 Dziedziczenie Poprzednie dwa rozdziały które dotyczyły zagadnienia automatów komórkowych na przykładach programów w C++. Mogłyby one sugerować że niekoniecznie trzeba programować obiektowo aby napisać

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 2

PARADYGMATY PROGRAMOWANIA Wykład 2 PARADYGMATY PROGRAMOWANIA Wykład 2 Definiowanie klas w C++ - ciąg dalszy Lista inicjalizująca konstruktora Przeznaczenie - do inicjalizacji pól klasy z kwalifikatorem const i inicjalizacji obiektów składowych

Bardziej szczegółowo

Plik klasy. h deklaracje klas

Plik klasy. h deklaracje klas Plik klasy. h deklaracje klas KLASY DLA PRZYKŁADÓW Z POLIMORFIZMEM enum dim r1 = 1, r2, r3; class figura public: static int const maxliczbafigur; = 100; static int liczbafigur; dim rn; rodzaj przestrzeni

Bardziej szczegółowo

Język C++ wykład VIII

Język C++ wykład VIII Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,

Bardziej szczegółowo

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2) Podstawy programowania (język C) Globalne / Lokalne Wykład 15. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Zmienne globalne / lokalne (1) int A, *Q; // definicja zmiennych globalnych

Bardziej szczegółowo

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski. - - uzupełnienie notatek: dr Jerzy Białkowski - - 1-2 - - - 1 #include 2 #include 3 # include 4 using namespace std ; 5 6 class Punkt { 7 8 private : 9 double

Bardziej szczegółowo

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016 Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac

Bardziej szczegółowo

Identyfikacje typu na etapie. wykonania (RTTI)

Identyfikacje typu na etapie. wykonania (RTTI) Identyfikacje typu na etapie (Run Time Type Identification) wykonania (RTTI) Może powstać taka sytuacje, gdy w trakcie kompilacji typ obiektu nie jest znany. C++ implementuje polimorfizm poprzez hierarchie

Bardziej szczegółowo

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Polimorfizm, metody wirtualne i klasy abstrakcyjne Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 3

PARADYGMATY PROGRAMOWANIA Wykład 3 PARADYGMATY PROGRAMOWANIA Wykład 3 Definiowanie operatorów i ich przeciążanie Przykłady zastosowania operatorów: a) operator podstawienia ( = ) obiektów o złożonej strukturze, b) operatory działania na

Bardziej szczegółowo

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

TEMAT : KLASY DZIEDZICZENIE TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą

Bardziej szczegółowo

TEMAT : KLASY POLIMORFIZM

TEMAT : KLASY POLIMORFIZM TEMAT : KLASY POLIMORFIZM 1. Wprowadzenie do polimorfizmu i funkcji wirtualnych w języku C++ Język C++ zakłada, że w pewnych przypadkach uzasadnione jest tworzenie klas, których reprezentanci w programie

Bardziej szczegółowo

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy? Zad.28. Utwórz klasę, która implementuje oba interfejsy: public void pisz ( ) ; public void pisz ( ) ; Zad.29. Utwórz klasę, która implementuje oba interfejsy: public void pisz ( int l i c z b a ) ; public

Bardziej szczegółowo

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 12 Katarzyna Grzelak 28 maja 2018 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Klasy cd K.Grzelak (Wykład 12) Programowanie w C++ 2 / 27 Klasy - powtórzenie Klasy typy definiowane

Bardziej szczegółowo

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk.   tel: Konsultacje: piątek: Języki Programowania Prowadząca: dr inż. Hanna Zbroszczyk e-mail: gos@if.pw.edu.pl tel: +48 22 234 58 51 Konsultacje: piątek: 12.00 13.30 www: http://www.if.pw.edu.pl/~gos/students/jp Politechnika Warszawska

Bardziej szczegółowo

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++ IMIĘ i NAZWISKO: przykładowe odpowiedzi NR: 0 EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++ 1. Napisz precyzyjnie co to jest ptr jeśli: const * const Foo ptr; ptr to stały wskaźnik do stałego obiektu typu Foo

Bardziej szczegółowo

C++ Przeładowanie operatorów i wzorce w klasach

C++ Przeładowanie operatorów i wzorce w klasach C++ i wzorce w klasach Andrzej Przybyszewski numer albumu: 89810 14 listopada 2009 Ogólnie Przeładowanie (przeciążanie) operatorów polega na nadaniu im nowych funkcji. Przeładowanie operatora dokonuje

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część dziewiąta Autor Roman Simiński Kontakt siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

Bardziej szczegółowo

Programowanie obiektowe w języku

Programowanie obiektowe w języku Programowanie obiektowe w języku C++ Stanisław Gepner sgepner@meil.pw.edu.pl Dziedziczenie Wstęp Zacznijmy od przykładu Przykład rolniczy Każde zwierzątko wydaje dźwięk Każde się tak samo porusza Musimy

Bardziej szczegółowo

Konstruktor kopiujacy

Konstruktor kopiujacy Konstruktor kopiujacy Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępniony

Bardziej szczegółowo

C++ - [4-7] Polimorfizm

C++ - [4-7] Polimorfizm Slajd 1 z 14 C++ - [4-7] Polimorfizm Nysa 2004-2013. Autor: Wojciech Galiński. wersja dnia 20 maja 2013 r. Slajd 2 z 14 Polimorfizm i klasa polimorficzna POLIMORFIZM (cytat z Wikipedii) (wielopostaciowość)

Bardziej szczegółowo

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26 Programowanie w C++ Wykład 13 Katarzyna Grzelak 4 czerwca 2018 K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

Bardziej szczegółowo

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Programowanie w C++ Wykład 11 Katarzyna Grzelak 13 maja 2019 K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Klasy cd K.Grzelak (Wykład 11) Programowanie w C++ 2 / 30 Klasy - powtórzenie Klasy typy definiowane

Bardziej szczegółowo

Efekty uboczne błędów

Efekty uboczne błędów Obsługa wyjątków Efekty uboczne błędów Fragment kodu programu jest bezpieczny (ang. exception-safe) jeżeli błędy, które wystąpią w trakcie przetwarzania tego kodu nie będą powodowały niepożądanych efektów

Bardziej szczegółowo

Programowanie obiektowe w C++ Wykład 12

Programowanie obiektowe w C++ Wykład 12 Programowanie obiektowe w C++ Wykład 12 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) 1 / 22 Zakresowe pętle for double tab[5] {1.12,2.23,3.33,4.12,5.22 for(double x: tab)

Bardziej szczegółowo

Techniki Programowania wskaźniki

Techniki Programowania wskaźniki Techniki Programowania wskaźniki Łukasz Madej Katedra Informatyki Stosowanej i Modelowania Wykłady opracowane we współpracy z Danutą Szeligą, Łukaszem Sztangretem Wskaźniki Dla typu T zapis T* oznacza

Bardziej szczegółowo

dr inż. Jarosław Forenc

dr inż. Jarosław Forenc Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013 Wykład nr 6 (07.12.2012) dr inż. Jarosław Forenc Rok

Bardziej szczegółowo

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 4. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Przeciążanie operatorów Funkcje zaprzyjaźnione Na

Bardziej szczegółowo

Wyliczanie wyrażenia obiekty tymczasowe

Wyliczanie wyrażenia obiekty tymczasowe Wyliczanie wyrażenia obiekty tymczasowe Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2013 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu

Bardziej szczegółowo

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40 Programowanie w C++ Wykład 6 Katarzyna Grzelak kwiecień 2019 K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40 STL - powtórzenie STL Standard Template Libarary standardowa biblioteka szablonów Składowe biblioteki:

Bardziej szczegółowo

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 30.10.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 30.10.2006 85 / 112 Zgodność typów Rozważmy klasy class A { //... }; class

Bardziej szczegółowo

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi 1. Napisz wskaźnik do funkcji fun tak zdeklarowanej: T* fun( int, double const& ) const; definicja wskaźnika musi być precyzyjna, inaczej

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2) Podstawy programowania (język C) funkcje rekurencyjne Wykład 12. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Funkcje rekurencyjne (1) W języku C funkcja moŝe wywoływać samą siebie.

Bardziej szczegółowo

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory Dzisiejszy wykład Klasa string wersja prosta wersja ze zliczaniem odwołań Wyjątki Specyfikator volatile Semafory 1 Klasa string Przetwarzanie tekstów jest powszechną dziedziną zastosowań komputerów W języku

Bardziej szczegółowo

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 14 Katarzyna Grzelak 3 czerwca 2019 K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Na ostatnim wykładzie: Konstruktor standardowy (domyślny) to taki, który nie ma żadnych argumentów

Bardziej szczegółowo

hierarchie klas i wielodziedziczenie

hierarchie klas i wielodziedziczenie Programowanie Obiektowe (język C++) Wykład 15. hierarchie klas i wielodziedziczenie Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Hierarchie klas Dziedziczenie wprowadza relację

Bardziej szczegółowo

Owad():waga(1),jadowitosc(false) {cout<<"konstruktor domyslny owada\n";}

Owad():waga(1),jadowitosc(false) {cout<<konstruktor domyslny owada\n;} // Wskaźniki #include using namespace std; class Owad int waga; bool jadowitosc; Owad():waga(1),jadowitosc(false) cout

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 8 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Podprogramy Czasami wygodnie jest wyodrębnić jakiś fragment programu jako pewną odrębną całość umożliwiają to podprogramy.

Bardziej szczegółowo

Wstęp do Programowania 2

Wstęp do Programowania 2 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:

Bardziej szczegółowo

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych

Bardziej szczegółowo

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków mgr inż. Maciej Lasota Version 1.0, 13-05-2017 Spis treści Wyjątki....................................................................................

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 10 Agata Półrola Wydział Matematyki i Informatyki UŁ semestr zimowy 2018/2019 Przesyłanie argumentów - cd Przesyłanie argumentów do funkcji - tablice wielowymiarowe Przekazywanie tablic wielowymiarowych

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki int getmax (int a, int b) { return (a > b? a : b); float getmax (float a, float b) { return (a > b? a : b); long getmax (long a, long b)

Bardziej szczegółowo

Dziedziczenie jednobazowe, poliformizm

Dziedziczenie jednobazowe, poliformizm Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie jednobazowe 2. Polimorfizm część pierwsza 3. Polimorfizm część druga Zofia Kruczkiewicz, ETE8305_6 1 Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie

Bardziej szczegółowo

Szablon klasy std::list

Szablon klasy std::list Szablon klasy std::list Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania

Bardziej szczegółowo

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Wirtualne destruktory class A int* a; A(int _a) a = new int(_a);} virtual ~A() delete a;} class B: public A double* b;

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Operator przypisania. Jest czym innym niż konstruktor kopiujący! Operator przypisania Jest czym innym niż konstruktor kopiujący! Domyślnie jest zdefiniowany jako przypisanie składowa po składowej (zatem niekoniecznie bajt po bajcie). Dla klasy X definiuje się jako X&

Bardziej szczegółowo

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis. Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 10 I 2012 1 Zabronienie kopiowania Czasami nie ma sensu, żeby obiekty pewnego typu były kopiowane z innych obiektów.

Bardziej szczegółowo

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory

Bardziej szczegółowo

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie

Bardziej szczegółowo

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

Bardziej szczegółowo

class Student Deklaracja klasy Osoba: Deklaracja klasy Student:

class Student Deklaracja klasy Osoba: Deklaracja klasy Student: Osoba Student Będziemy mieli 2 klasy: Osoba, dla której zapamiętamy dane takie jak: imie, nazwisko i wiek Oraz klasę Student, w której będziemy też dodatkowo pamiętać kierunek studiów. Deklaracja klasy

Bardziej szczegółowo

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31 Programowanie w C++ Wykład 8 Katarzyna Grzelak 7 maja 2018 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31 STL - powtórzenie STL Standard Template Libarary standardowa biblioteka szablonów Składowe biblioteki:

Bardziej szczegółowo

Zmienne i struktury dynamiczne

Zmienne i struktury dynamiczne Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest

Bardziej szczegółowo

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej. Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.

Bardziej szczegółowo

Listy powiązane zorientowane obiektowo

Listy powiązane zorientowane obiektowo Listy powiązane zorientowane obiektowo Aby zilustrować potęgę polimorfizmu, przeanalizujmy zorientowaną obiektowo listę powiązaną. Jak zapewne wiesz, lista powiązana jest strukturą danych, zaprojektowaną

Bardziej szczegółowo

Programowanie Obiektowe Ćwiczenie 4

Programowanie Obiektowe Ćwiczenie 4 Programowanie Obiektowe Ćwiczenie 4 1. Zakres ćwiczenia wyjątki kompozycja 2. Zagadnienia Założeniem, od którego nie należy odbiegać, jest by każdy napotkany problem (np. zatrzymanie wykonywanej metody)

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Wykład 9 - powtórzenie. 11 maja 2007 Powtórzenie materiału obiekty automatyczne, statyczne, tymczasowe, dynamiczne dziedziczenie, agregacja polimorfizm, funkcje wirtualne wzorce projektowe (strukturalne,

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri); Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod

Bardziej szczegółowo

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

Programowanie Obiektowew języku C++ Zadania L9

Programowanie Obiektowew języku C++ Zadania L9 Programowanie Obiektowew języku C++ Zadania L9 Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra Informatyki

Bardziej szczegółowo

Obsługa wyjątków. Język C++ WW12

Obsługa wyjątków. Język C++ WW12 Obsługa wyjątków Pozwala zarządzać błędami wykonania w uporządkowany sposób. Umożliwia automatyczne wywołanie części kodu, funkcji, metod klas, który trzeba wykonać przy powstaniu błędów. try //blok try

Bardziej szczegółowo

Dziedziczenie. Ogólna postać dziedziczenia klas:

Dziedziczenie. Ogólna postać dziedziczenia klas: Dziedziczenie Ogólna postać dziedziczenia klas: class nazwa_clasy_pochodnej : specyfikator_dostępu nazwa_clasy_bazowej specyfikator_dostępu : public private protected Specyfikator dostępu definiuje, w

Bardziej szczegółowo

DYNAMICZNE PRZYDZIELANIE PAMIECI

DYNAMICZNE PRZYDZIELANIE PAMIECI DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne

Bardziej szczegółowo

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura

Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura Programowanie komputerów Programowanie obiektowe. Typy zmiennych proste i złożone Typy zmiennych "wbudowane", tj. identyfikowane przez słowa kluczowe, są określane jako proste: int short long float double

Bardziej szczegółowo

C-struktury wykład. Dorota Pylak

C-struktury wykład. Dorota Pylak C-struktury wykład Dorota Pylak C-struktury W języku C++, jak w każdym języku obiektowym, mamy możliwość definiowania własnych typów danych, wraz z określeniem operacji, jakie na tych danych można wykonywać.

Bardziej szczegółowo

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1)

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1) Programowanie Obiektowe (język C++) Wykład 10. FUNKCJE WZORCOWE Funkcje wzorcowe wprowadzenie (1) Funkcje wzorcowe wprowadzenie (2) int max ( int a, int b ) return a>b? a : b; Aby mieć analogiczną funkcję

Bardziej szczegółowo

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.

Bardziej szczegółowo

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów. PROGRAMOWANIE OBIEKTOWE W C++ cz. 2 Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów. Dziedziczenie Dziedziczenie jest to technika pozwalaj c na definiowanie nowej klasy przy wykorzystaniu

Bardziej szczegółowo

Składnia C++ Programowanie Obiektowe, część 3 Mateusz Cicheński

Składnia C++ Programowanie Obiektowe, część 3 Mateusz Cicheński Składnia C++ Programowanie Obiektowe, część 3 Mateusz Cicheński Rzutowanie Implicit/explicit cast Reinterpret cast Static cast Z wykorzystaniem Run-time Type Information Obsługa wyjątków Czym jest wyjątek

Bardziej szczegółowo

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Projektowanie obiektowe. Roman Simiński  Wzorce projektowe Wybrane wzorce strukturalne Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Wzorce projektowe Wybrane wzorce strukturalne Fasada Facade Pattern 2 Wzorzec Fasada Facade Pattern koncepcja 3 Wzorzec

Bardziej szczegółowo

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32 Programowanie w C++ Wykład 12 Katarzyna Grzelak 20 maja 2019 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe

Bardziej szczegółowo

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji Wprowadzenie do szablonów szablony funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do

Bardziej szczegółowo

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Historia C++ został zaprojektowany w 1979 przez Bjarne Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i

Bardziej szczegółowo

Szablony funkcji i szablony klas

Szablony funkcji i szablony klas Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

Operacje wejścia/wyjścia odsłona pierwsza

Operacje wejścia/wyjścia odsłona pierwsza Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.

Bardziej szczegółowo

Programowanie, część I

Programowanie, część I 11 marca 2010 Kontakt Wstęp Informacje organizacyjne Materiał na ćwiczenia Plan wykładu http://www.fuw.edu.pl/~rwys/prog rwys@fuw.edu.pl tel. 22 55 32 263 Materiał na ćwiczenia Informacje organizacyjne

Bardziej szczegółowo

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE

Bardziej szczegółowo

Programowanie - wykład 4

Programowanie - wykład 4 Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Podstawy algorytmiki i programowania - wykład 4 C-struktury 1 Podstawy algorytmiki i programowania - wykład 4 C-struktury Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy

Bardziej szczegółowo