Dziedziczenie i poliformizm

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

Download "Dziedziczenie i poliformizm"

Transkrypt

1 Bogdan Kreczmer Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska Kurs: Copyright c 2016 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłącznie do własnych prywatnych potrzeb i może on być kopiowany wyłącznie w całości, razem z niniejszą stroną tytułową.

2 Niniejsza prezentacja została wykonana przy użyciu systemu składu L A TEX oraz stylu beamer, którego autorem jest Till Tantau. Strona domowa projektu Beamer:

3 Plan prezentacji 1 Rzutowanie Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody 2 Utrata informacji przy rzutowaniu w górę 3 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

4 Plan prezentacji Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody 1 Rzutowanie Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody 2 Utrata informacji przy rzutowaniu w górę 3 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

5 Rzutowanie wskaźnika Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany;

6 Rzutowanie wskaźnika Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany;

7 Rzutowanie wskaźnika Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany;

8 Rzutowanie wskaźnika Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; Gruszka wgr1 = new Gruszka();

9 Rzutowanie wskaźnika Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; Gruszka Owoc wgr1 = new Gruszka(); wowocx = wgr1;

10 Rzutowanie wskaźnika Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; Gruszka Owoc wgr1 = new Gruszka(); wowocx = wgr1; Rzutowanie na nadklasę (klasę bazową) może być wykonane niejawnie.

11 Rzutowanie wskaźnika Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; Gruszka Owoc wgr1 = new Gruszka(); wowocx = static cast<owoc >(wgr1); Można to również zrobić w sposób jawny.

12 Rzutowanie wskaźnika Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; Gruszka Owoc wgr1 = new Gruszka(); wowocx = wgr1; cout << Addr wgr: << wgr1 << endl; cout << Addr wow: << wowocx << endl;

13 Rzutowanie wskaźnika Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; Gruszka Owoc wgr1 = new Gruszka(); wowocx = wgr1; cout << Addr wgr: << wgr1 << endl; cout << Addr wow: << wowocx << endl; Wynik działania: Addr wgr: 0x804a008 Addr wow: 0x804a008 Brak różnicy w adresach wynika z tego, że obiekt klasy bazowej znajduje się na początku obiektu klasy pochodnej.

14 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor;

15 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor;

16 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor;

17 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy wdzwkol = new DzwigKolowy();

18 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy PojazdKolowy wdzwkol = new DzwigKolowy(); wpojazdk = wdzwkol;

19 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy PojazdKolowy wdzwkol = new DzwigKolowy(); wpojazdk = wdzwkol; Tak jak to miało miejsce wcześnij, rzutowanie na nadklasę (klasę bazową) może być wykonane niejawnie.

20 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy PojazdKolowy wdzwkol = new DzwigKolowy(); wpojazdk = static cast<pojazdkolowy >(wdzwkol); I tym przypadku można to również zrobić w sposób jawny.

21 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy PojazdKolowy wdzwkol = new DzwigKolowy(); wpojazdk = wdzwkol; cout << Addr wdzk: << wdzwkol << endl; cout << Addr wpoj: << wpojazdk << endl;

22 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy PojazdKolowy wdzwkol = new DzwigKolowy(); wpojazdk = wdzwkol; cout << Addr wdzk: << wdzwkol << endl; cout << Addr wpoj: << wpojazdk << endl; Wynik działania: Addr wdzk: 0x916c000 Addr wpoj: 0x906c004 W tym przykładzie rzutowanie wiąże się z fizyczną zmianą adresu. Różnica adresów związana jest z tym, że obiekt nadklasy PojazdKolowy jest drugi w kolejności w strukturze obiektu DzwigKolowy.

23 Rzutowanie na refencję Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; Gruszka Gr1;

24 Rzutowanie na refencję Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; Gruszka Owoc Gr1; &OwocX = Gr; Rzutowanie na referencję daje analogiczne efekty. Jest ono domyślnie realizowane niejawnie.

25 Rzutowanie na refencję Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; Gruszka Owoc Gr1; &OwocX = static cast<owoc&>(gr1); Zawsze można wykonać je jawnie wykorzystując operator rzutowania static cast.

26 Rzutowanie na refencję Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; Gruszka Owoc Gr1; &OwocX = Gr; cout << Addr Gr: << &Gr1 << endl; cout << Addr Ow: << &OwocX << endl; Wynik działania: Addr Gr: 0x7239c0a Addr Ow: 0x7239c0a Z tych samych przyczyn co poprzednio, oba wyświetlane adresy są takie same.

27 Rzutowanie na referencję Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy DzwKol;

28 Rzutowanie na referencję Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy PojazdKolowy DzwKol; &PojazdK = DzwKol; Tutaj również rzutowanie jest niejawne i przebiega ono analogicznie jak w tym samym przykładzie dla wskaźników.

29 Rzutowanie na referencję Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy PojazdKolowy DzwKol; &PojazdK = static cast<pojazdkolowy&>(dzwkol); Oczywiście można je zrealizować jawnie.

30 Rzutowanie na referencję Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy PojazdKolowy DzwKol; &PojazdK = DzwKol; cout << Addr DzK: << DzwKol << endl; cout << Addr Poj: << PojazdK << endl; Wynik działania: Addr wdzk: 0x7181d00 Addr wpoj: 0x7181d04 Z tych samym przyczyn, co w analogicznym przykładzie dla wskaźników, rzutowanie wiąże się z fizyczną zmianą adresu.

31 Rzutowanie w górę Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody Rzutowanie w górę jest rzutowaniem na klasę bazową. Tego typu rzutowanie zawsze się powiedzie, gdyż obiekt klasy pochodnej musi zawierać podobiekt klasy bazowej. Z tego powodu rzutowanie to może być realizowane niejawnie.

32 Rzutowanie w górę Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody Rzutowanie w górę jest rzutowaniem na klasę bazową. Tego typu rzutowanie zawsze się powiedzie, gdyż obiekt klasy pochodnej musi zawierać podobiekt klasy bazowej. Z tego powodu rzutowanie to może być realizowane niejawnie.

33 Plan prezentacji Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody 1 Rzutowanie Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody 2 Utrata informacji przy rzutowaniu w górę 3 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

34 Rzutowanie na wskaźnik do nadobiektu Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy DzwKol;

35 Rzutowanie na wskaźnik do nadobiektu Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy PojazdKolowy DzwKol; wpojazdk = &DzwKol; Rzutowanie w górę przebiega w sposób niejawny. Tu jest OK.

36 Rzutowanie na wskaźnik do nadobiektu Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy PojazdKolowy DzwigKolowy DzwKol; wpojazdk = &DzwKol; wdzwigko = wpojazdk; A co z tym przypadkiem?

37 Rzutowanie na wskaźnik do nadobiektu Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy PojazdKolowy DzwigKolowy DzwKol; wpojazdk = &DzwKol; wdzwigko = wpojazdk; Ten typ rzutowania nie może być niejawny.

38 Rzutowanie na wskaźnik do nadobiektu Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy PojazdKolowy DzwigKolowy DzwKol; wpojazdk = &DzwKol; wdzwigko = static cast<dzwigkolowy >(wpojazdk); Można jednak wymusić rzutowanie w sposób jawny wykorzystując operator rzutowania static cast.

39 Rzutowanie na wskaźnik do nadobiektu Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy PojazdKolowy DzwigKolowy DzwKol; wpojazdk = &DzwKol; wdzwigko = static cast<dzwigkolowy >(wpojazdk); cout << Addr DzK1: << &DzwKol << endl; cout << Addr DzK2: << wdzwigko << endl; Wynik działania: Addr wdzk1: 0x7918c08 Addr wdzk2: 0x7918c08 Dzięki tej operacji dysponując częścią obiektu możemy odzyskać adres całego obiektu.

40 Rzutowanie na referencję do nadobiektu Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy PojazdKolowy DzwKol; &PojazdK = DzwKol;

41 Rzutowanie na referencję do nadobiektu Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy PojazdKolowy DzwigKolowy DzwKol; &PojazdK = DzwKol; &DzwigKo = static cast<dzwigkolowy&>(pojazdk); Możemy wymusić rzutowanie w górę na referencję do obiektu

42 Rzutowanie na referencję do nadobiektu Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; DzwigKolowy PojazdKolowy DzwigKolowy DzwKol; &PojazdK = DzwKol; &DzwigKo = static cast<dzwigkolowy&>(pojazdk); cout << Addr DzK1: << &DzwKol << endl; cout << Addr DzK2: << wdzwigko << endl; Wynik działania: Addr wdzk1: 0x7918c08 Addr wdzk2: 0x7918c08 Dzięki tej operacji dysponując częścią obiektu możemy odzyskać adres całego obiektu.

43 Rzutowanie w dół Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody Rzutowanie w dół jest rzutowaniem na klasę pochodną. Ze względu na to, że obiekt klasy bazowej nie zawsze musi być składnikiem obiektu klasy pochodnej (np. może występować samodzielnie), rzutowanie to może nie powieść się.

44 Rzutowanie w dół Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody Rzutowanie w dół jest rzutowaniem na klasę pochodną. Ze względu na to, że obiekt klasy bazowej nie zawsze musi być składnikiem obiektu klasy pochodnej (np. może występować samodzielnie), rzutowanie to może nie powieść się.

45 Błędne rzutowanie w górę Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; PojazdKolowy PojK; Ten typ rzutowania może być niebezpieczny. Rozważmy następującą sytuację...

46 Błędne rzutowanie w górę Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; PojazdKolowy DzwigKolowy PojK; wdzwigk = static cast<dzwigkolowy >(&PojK); Rzutując otrzymujemy wskaźnik na nieistniejący obiekt. Odwołując się do niego prawie na pewno w którymś momencie zobaczymy komunikat segmentation fault :(

47 Błędne rzutowanie w górę Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody struct Dzwig double MaksUdzwig; ; // struct PojazdKolowy unsigned int IloscKol; ; // struct DzwigKolowy: public Dzwig, public PojazdKolowy, // unsigned int IloscPodpor; PojazdKolowy DzwigKolowy PojK; wdzwigk = static cast<dzwigkolowy >(&PojK); cout << Addr PojK: << &PojK << endl; cout << Addr DzwK: << wdzwigk << endl; Wynik działania: Addr PojK: 0x6198e04 Addr DzwK: 0x6198e00 Adres dostępny poprzez wdzwigk, nie jest adresem rzeczywistego obiektu.

48 Plan prezentacji Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody 1 Rzutowanie Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody 2 Utrata informacji przy rzutowaniu w górę 3 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

49 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody Niejawne rzutowanie w liście parametrów funkcji struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; void Wyswietl(const Owoc wowoc) cout << Waga: << wowoc > Waga kg << endl; Gruszka Gr1;

50 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody Niejawne rzutowanie w liście parametrów funkcji struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; void Wyswietl(const Owoc wowoc) cout << Waga: << wowoc > Waga kg << endl; Gruszka Gr1;

51 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody Niejawne rzutowanie w liście parametrów funkcji struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; void Wyswietl(const Owoc wowoc) cout << Waga: << wowoc > Waga kg << endl; Gruszka Gr1; Wyswietl(&Gr1); Niejawne rzutowanie pozwala wykorzystać funkcjonalności stworzone dla klasy bazowej na potrzeby obiektów klasy pochodnej.

52 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody Niejawne rzutowanie w liście parametrów funkcji struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; inline void Wyswietl(const Owoc wowoc) cout << Waga: << wowoc > Waga kg << endl; Gruszka Gr1; const Owoc wowoc = &Gr1; cout << Waga: << wowoc > Waga kg << endl; Niejawne rzutowanie w liście parametrów jest niczym innym jak rzutowaniem w przypadku operacji podstawienia.

53 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody Rzutowanie na referencję w liście parametrów struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; void Wyswietl(const Owoc &Ow) cout << Waga: << Ow. Waga kg << endl; Gruszka Gr1;

54 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody Rzutowanie na referencję w liście parametrów struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; void Wyswietl(const Owoc &Ow) cout << Waga: << Ow. Waga kg << endl; Gruszka Gr1;

55 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody Rzutowanie na referencję w liście parametrów struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; void Wyswietl(const Owoc &Ow) cout << Waga: << Ow. Waga kg << endl; Gruszka Gr1; Wyswietl(Gr1); Możliwość niejawnego rzutowania na referencje do obiektów klasy bazowej, jeszcze bardziej rozszerza użyteczność funkcji tworzonych dla tych obiektów.

56 Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody Niejawne rzutowanie na referencję w liście parametrów struct Owoc // double Waga kg; struct Gruszka: public Owoc // int KodOdmiany; inline void Wyswietl(const Owoc &Ow) cout << Waga: << Ow. Waga kg << endl; Gruszka Gr1; const Owoc &Ow = Gr1; cout << Waga: << Ow. Waga kg << endl; Niejawne rzutowanie w liście parametrów jest niczym innym jak rzutowaniem w przypadku operacji podstawienia.

57 Jak rozumieć polimorfizm Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody Polimorfizm (gr. wielopostaciowość) w przypadku podejścia obiektowo zorientowanego przez pojęcie polimorfizmu rozumie się możliwość stworzenia obiektu, który może mieć więcej niż jedną formę. W praktyce oznacza to, że może on mieć metodę, która dla tego samego typu obiektów mają różne definicje.

58 Plan prezentacji Utrata informacji przy rzutowaniu w górę 1 Rzutowanie Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody 2 Utrata informacji przy rzutowaniu w górę 3 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

59 Utrata informacji przy rzutowaniu w górę Wykorzystywanie funkcjonalności klasy bazowej struct KlasaBazowa // int Wartosc() const return 1; struct KlasaPochodna: public KlasaBazowa // int Wartosc() const return 9; KlasaPochodna ObP; KlasaBazowa wskb = &ObP; cout << ObP.Wartosc() << endl; cout << ObP.KlasaBazowa::Wartosc() << endl; cout << wskb->wartosc() << endl;...

60 Utrata informacji przy rzutowaniu w górę Wykorzystywanie funkcjonalności klasy bazowej struct FiguraGeometryczna // float Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float a; float Pole( ) const return a a; void WyswietlPole( const FiguraGeometryczna & Fig ) cout << Pole: << Fig.Pole( ) << endl; Kwadrat Kw; Kw. a = 2; WyswietlPole( Kw );

61 Utrata informacji przy rzutowaniu w górę Wykorzystywanie funkcjonalności klasy bazowej struct FiguraGeometryczna // float Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float a; float Pole( ) const return a a; void WyswietlPole( const FiguraGeometryczna & Fig ) cout << Pole: << Fig.Pole( ) << endl; Kwadrat Kw; Kw. a = 2; WyswietlPole( Kw );

62 Utrata informacji przy rzutowaniu w górę Wykorzystywanie funkcjonalności klasy bazowej struct FiguraGeometryczna // float Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float a; float Pole( ) const return a a; void WyswietlPole( const FiguraGeometryczna & Fig ) cout << Pole: << Fig.Pole( ) << endl; Kwadrat Kw; Kw. a = 2; WyswietlPole( Kw );

63 Utrata informacji przy rzutowaniu w górę Wykorzystywanie funkcjonalności klasy bazowej struct FiguraGeometryczna // float Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float a; float Pole( ) const return a a; void WyswietlPole( const FiguraGeometryczna & Fig ) cout << Pole: << Fig.Pole( ) << endl; Kwadrat Kw; Kw. a = 2; WyswietlPole( Kw ); Wynik działania: Pole: 0

64 Utrata informacji przy rzutowaniu w górę Wykorzystywanie funkcjonalności klasy bazowej struct FiguraGeometryczna // float Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float a; float Pole( ) const return a a; void WyswietlPole( const FiguraGeometryczna & Fig ) cout << Pole: << Fig.Pole( ) << endl; Kwadrat Kw; Kw. a = 2; WyswietlPole( Kw ); Dysponując klasą pochodną możemy skorzystać z funkcji stworzonych dla klasy bazowej. Operują one jednak tylko i wyłącznie na podobiektach klasy bazowej. Wynik działania: Pole: 0

65 Utrata informacji przy rzutowaniu w górę Wykorzystywanie funkcjonalności klasy bazowej void WyswietlPole( const FiguraGeometryczna & Fig ) float Pole; switch (??? ) case? : Pole = Fig.Pole( ); break ; case? : Pole = static cast <Kwadrat&>(Fig).Pole( ); break ; cout << Pole: << Pole << endl;

66 Utrata informacji przy rzutowaniu w górę Wykorzystywanie funkcjonalności klasy bazowej void WyswietlPole( const FiguraGeometryczna & Fig ) float Pole; switch (??? ) case? : Pole = Fig.Pole( ); break ; case? : Pole = static cast <Kwadrat&>(Fig).Pole( ); break ; cout << Pole: << Pole << endl;

67 Utrata informacji przy rzutowaniu w górę Wykorzystywanie funkcjonalności klasy bazowej void WyswietlPole( const FiguraGeometryczna & Fig ) float Pole; switch (??? ) case? : Pole = Fig.Pole( ); break ; case? : Pole = static cast <Kwadrat&>(Fig).Pole( ); break ; cout << Pole: << Pole << endl; Jeżeli w jakiś sposób odzyskamy informację o nadtypie obiektu, to możemy odpowiednio zmodyfikować funkcję, tak aby można było ją również stosować dla obiektów klasy pochodnej.

68 Utrata informacji przy rzutowaniu w górę Rozpoznawanie typu poprzez identyfikator struct FiguraGeometryczna // FiguraGeometryczna( ): TypID( ) int ID( ) const return TypID; float Pole( ) const return 0; protected : int TypID; FiguraGeometryczna( int ID ): TypID( ID ) struct Kwadrat: public FiguraGeometryczna // float a; Kwadrat( ): FiguraGeometryczna( 1 ) float Pole( ) const return a a;

69 Utrata informacji przy rzutowaniu w górę Rozpoznawanie typu poprzez identyfikator struct FiguraGeometryczna // FiguraGeometryczna( ): TypID( ) int ID( ) const return TypID; float Pole( ) const return 0; protected : int TypID; FiguraGeometryczna( int ID ): TypID( ID ) Aby móc rozpoznać typ nadobiektu struct Kwadrat: public FiguraGeometryczna // można wprowadzić dodatkowe pole. float a; Kwadrat( ): FiguraGeometryczna( 1 ) float Pole( ) const return a a;

70 Utrata informacji przy rzutowaniu w górę Rozpoznawanie typu poprzez identyfikator struct FiguraGeometryczna // FiguraGeometryczna( ): TypID( ) int ID( ) const return TypID; float Pole( ) const return 0; protected : int TypID; FiguraGeometryczna( int ID ): TypID( ID ) Aby móc rozpoznać typ nadobiektu struct Kwadrat: public FiguraGeometryczna // można wprowadzić dodatkowe pole. float a; Musi ono zawierać wartość sta- nowiącą identyfikator danej klasy lub nadklasy. Identyfikator ten po- Kwadrat( ): FiguraGeometryczna( 1 ) float Pole( ) const return a a; winien być przypisany polu w mo- mencie tworzenia obiektu, tzn. w konstruktorze.

71 Wykorzystanie identyfikatora typu Utrata informacji przy rzutowaniu w górę void WyswietlPole( const FiguraGeometryczna & Fig ) float Pole; switch ( Fig.ID( ) ) case 0 : Pole = Fig.Pole( ); break ; case 1 : Pole = static cast <Kwadrat&>(Fig).Pole( ); break ; cout << Pole: << Pole << endl;

72 Wykorzystanie identyfikatora typu Utrata informacji przy rzutowaniu w górę void WyswietlPole( const FiguraGeometryczna & Fig ) float Pole; switch ( Fig.ID( ) ) case 0 : Pole = Fig.Pole( ); break ; case 1 : Pole = static cast <Kwadrat&>(Fig).Pole( ); break ; cout << Pole: << Pole << endl;

73 Wykorzystanie identyfikatora typu Utrata informacji przy rzutowaniu w górę void WyswietlPole( const FiguraGeometryczna & Fig ) float Pole; switch ( Fig.ID( ) ) case 0 : Pole = Fig.Pole( ); break ; case 1 : Pole = static cast <Kwadrat&>(Fig).Pole( ); break ; cout << Pole: << Pole << endl; Wprowadzone pole identyfikatora pozwala rozpoznać klasę, której częścią jest dany obiekt.

74 Wykorzystanie identyfikatora typu Utrata informacji przy rzutowaniu w górę void WyswietlPole( const FiguraGeometryczna & Fig ) float Pole; switch ( Fig.ID( ) ) case 0 : Pole = Fig.Pole( ); break ; case 1 : Pole = static cast <Kwadrat&>(Fig).Pole( ); break ; cout << Pole: << Pole << endl; Wprowadzone pole identyfikatora pozwala rozpoznać klasę, której częścią jest dany obiekt.

75 Plan prezentacji Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów 1 Rzutowanie Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody 2 Utrata informacji przy rzutowaniu w górę 3 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

76 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definiowanie metod wirtualnych w klasie struct FiguraGeometryczna // float Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float DlugoscBoku; float Pole( ) const return DlugoscBoku DlugoscBoku; void WyswietlPole( const FiguraGeometryczna & Fig ) cout << Pole: << Fig.Pole( ) << endl; Kwadrat Kw; Kw. DlugoscBoku = 2; WyswietlPole( Kw );

77 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definiowanie metod wirtualnych w klasie struct FiguraGeometryczna // virtual float Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float DlugoscBoku; virtual float Pole( ) const return DlugoscBoku DlugoscBoku; void WyswietlPole( const FiguraGeometryczna & Fig ) cout << Pole: << Fig.Pole( ) << endl; Kwadrat Kw; Kw. DlugoscBoku = 2; WyswietlPole( Kw );

78 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definiowanie metod wirtualnych w klasie struct FiguraGeometryczna // virtual float Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float DlugoscBoku; virtual float Pole( ) const return DlugoscBoku DlugoscBoku; void WyswietlPole( const FiguraGeometryczna & Fig ) cout << Pole: << Fig.Pole( ) << endl; Kwadrat Kw; Kw. DlugoscBoku = 2; WyswietlPole( Kw );

79 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definiowanie metod wirtualnych w klasie struct FiguraGeometryczna // virtual float Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float DlugoscBoku; virtual float Pole( ) const return DlugoscBoku DlugoscBoku; void WyswietlPole( const FiguraGeometryczna & Fig ) cout << Pole: << Fig.Pole( ) << endl; Kwadrat Kw; Kw. DlugoscBoku = 2; WyswietlPole( Kw );

80 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definiowanie metod wirtualnych w klasie struct FiguraGeometryczna // virtual float Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float DlugoscBoku; virtual float Pole( ) const return DlugoscBoku DlugoscBoku; void WyswietlPole( const FiguraGeometryczna & Fig ) cout << Pole: << Fig.Pole( ) << endl; Kwadrat Kw; Kw. DlugoscBoku = 2; WyswietlPole( Kw ); Wynik działania: Pole: 4

81 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definiowanie metod wirtualnych w klasie struct FiguraGeometryczna // virtual float Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float DlugoscBoku; virtual float Pole( ) const return DlugoscBoku DlugoscBoku; void WyswietlPole( const FiguraGeometryczna & Fig ) cout << Pole: << Fig.Pole( ) << endl; Kwadrat Kw; Kw. DlugoscBoku = 2; WyswietlPole( Kw ); Wynik działania: Pole: 4 Wprowadzenie metody wirtualnej sprawia, że podobiekt wie, że jest składnikiem większej całości.

82 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Występowanie słowa kluczowego virtual struct FiguraGeometryczna // virtual float Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float DlugoscBoku; virtual float Pole( ) const return DlugoscBoku DlugoscBoku; void WyswietlPole( const FiguraGeometryczna & Fig ) cout << Pole: << Fig.Pole( ) << endl; Kwadrat Kw; Kw. DlugoscBoku = 2; WyswietlPole( Kw ); Wynik działania: Pole: 4

83 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Występowanie słowa kluczowego virtual struct FiguraGeometryczna // virtual float Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float DlugoscBoku; float Pole( ) const return DlugoscBoku DlugoscBoku; void WyswietlPole( const FiguraGeometryczna & Fig ) cout << Pole: << Fig.Pole( ) << endl; Kwadrat Kw; Kw. DlugoscBoku = 2; WyswietlPole( Kw ); Wynik działania: Pole: 4

84 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Występowanie słowa kluczowego virtual struct FiguraGeometryczna // virtual float Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float DlugoscBoku; float Pole( ) const return DlugoscBoku DlugoscBoku; W klasie pochodnej nie jest konieczne używanie void WyswietlPole( const FiguraGeometryczna & Fig ) modyfikatora virtual do zdefiniowania metody wirtualnej. cout << Pole: << Fig.Pole( ) << endl; Wystarczy, że metoda ta z modyfikatorem virtual została zdefiniowana w klasie bazowej. Każda następna definicja w Kwadrat Kw; klasach pochodnych Kw. DlugoscBoku = 2; Wynik działania: automatycznie uznawana jest WyswietlPole( Kw ); jako definicja metody wirtualnej. Pole: 4

85 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definicja metody poza ciałem definicji klasy struct FiguraGeometryczna // virtual float Pole( ) const; float FiguraGeometryczna::Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float DlugoscBoku; virtual float Pole( ) const; float Kwadrat::Pole( ) const return DlugoscBoku DlugoscBoku;

86 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definicja metody poza ciałem definicji klasy struct FiguraGeometryczna // virtual float Pole( ) const; float FiguraGeometryczna::Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float DlugoscBoku; virtual float Pole( ) const; float Kwadrat::Pole( ) const return DlugoscBoku DlugoscBoku;

87 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definicja metody poza ciałem definicji klasy struct FiguraGeometryczna // virtual float Pole( ) const; float FiguraGeometryczna::Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float DlugoscBoku; virtual float Pole( ) const; float Kwadrat::Pole( ) const return DlugoscBoku DlugoscBoku;

88 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definicja metody poza ciałem definicji klasy struct FiguraGeometryczna // virtual float Pole( ) const; float FiguraGeometryczna::Pole( ) const return 0; struct Kwadrat: public FiguraGeometryczna // float DlugoscBoku; virtual float Pole( ) const; definiowane ; // poza..... ciałem definicji klasy definiowane są tak samo jak float Kwadrat::Pole( ) const zwykłe metody. Modyfikator virtual występuje return DlugoscBoku DlugoscBoku; tylko i wyłącznie w definicji klasy.

89 Plan prezentacji Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów 1 Rzutowanie Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody 2 Utrata informacji przy rzutowaniu w górę 3 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

90 Destruktory Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów struct FiguraGeometryczna // FiguraGeometryczna( ) cout << Konstruktor: FiguraGeometryczna << endl; FiguraGeometryczna( ) cout << Destruktor: FiguraGeometryczna << endl; struct Kwadrat: FiguraGeometryczna // Kwadrat( ) cout << Konstruktor: Kwadrat << endl; Kwadrat( ) cout << Destruktor: Kwadrat << endl; FiguraGeometryczna wobfig = new Kwadrat( ); delete wobfig;

91 Destruktory Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów struct FiguraGeometryczna // FiguraGeometryczna( ) cout << Konstruktor: FiguraGeometryczna << endl; FiguraGeometryczna( ) cout << Destruktor: FiguraGeometryczna << endl; struct Kwadrat: FiguraGeometryczna // Kwadrat( ) cout << Konstruktor: Kwadrat << endl; Kwadrat( ) cout << Destruktor: Kwadrat << endl; FiguraGeometryczna wobfig = new Kwadrat( ); delete wobfig;

92 Destruktory Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów struct FiguraGeometryczna // FiguraGeometryczna( ) cout << Konstruktor: FiguraGeometryczna << endl; FiguraGeometryczna( ) cout << Destruktor: FiguraGeometryczna << endl; struct Kwadrat: FiguraGeometryczna // Kwadrat( ) cout << Konstruktor: Kwadrat << endl; Kwadrat( ) cout << Destruktor: Kwadrat << endl; FiguraGeometryczna wobfig = new Kwadrat( ); delete wobfig;

93 Destruktory Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów struct FiguraGeometryczna // FiguraGeometryczna( ) cout << Konstruktor: FiguraGeometryczna << endl; FiguraGeometryczna( ) cout << Destruktor: FiguraGeometryczna << endl; struct Kwadrat: FiguraGeometryczna // Kwadrat( ) cout << Konstruktor: Kwadrat << endl; Kwadrat( ) cout << Destruktor: Kwadrat << endl; FiguraGeometryczna wobfig = new Kwadrat( ); delete wobfig;

94 Destruktory Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów struct FiguraGeometryczna // FiguraGeometryczna( ) cout << Konstruktor: FiguraGeometryczna << endl; FiguraGeometryczna( ) cout << Destruktor: FiguraGeometryczna << endl; struct Kwadrat: FiguraGeometryczna // Kwadrat( ) cout << Konstruktor: Kwadrat << endl; Kwadrat( ) cout << Destruktor: Kwadrat << endl; FiguraGeometryczna wobfig = new Kwadrat( ); delete wobfig; Wynik działania: Konstruktor: FiguraGeometryczna Konstruktor: Kwadrat Destruktor: FiguraGeometryczna

95 Destruktory Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów struct FiguraGeometryczna // FiguraGeometryczna( ) cout << Konstruktor: FiguraGeometryczna << endl; FiguraGeometryczna( ) cout << Destruktor: FiguraGeometryczna << endl; struct Kwadrat: FiguraGeometryczna // Kwadrat( ) cout << Konstruktor: Kwadrat << endl; Kwadrat( ) cout << Destruktor: Kwadrat << endl; FiguraGeometryczna wobfig = new Kwadrat( ); delete wobfig; Wynik działania: Konstruktor: FiguraGeometryczna Konstruktor: Kwadrat Destruktor: FiguraGeometryczna

96 Destruktory Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów struct FiguraGeometryczna // FiguraGeometryczna( ) cout << Konstruktor: FiguraGeometryczna << endl; FiguraGeometryczna( ) cout << Destruktor: FiguraGeometryczna << endl; struct Kwadrat: FiguraGeometryczna // Kwadrat( ) cout << Konstruktor: Kwadrat << endl; Kwadrat( ) cout << Destruktor: Kwadrat << endl; FiguraGeometryczna wobfig = new Kwadrat( ); delete wobfig; Wynik działania: Konstruktor: FiguraGeometryczna Konstruktor: Kwadrat Destruktor: FiguraGeometryczna

97 Destruktory Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów struct FiguraGeometryczna // FiguraGeometryczna( ) cout << Konstruktor: FiguraGeometryczna << endl; FiguraGeometryczna( ) cout << Destruktor: FiguraGeometryczna << endl; struct Kwadrat: FiguraGeometryczna // Kwadrat( ) cout << Konstruktor: Kwadrat << endl; Kwadrat( ) cout << Destruktor: Kwadrat << endl; FiguraGeometryczna wobfig = new Kwadrat( ); delete wobfig; Wynik działania: Konstruktor: FiguraGeometryczna Konstruktor: Kwadrat Destruktor: FiguraGeometryczna Jeżeli w klasie bazowej zdefiniowany jest zwykły destruktor, to operacja destrukcji dokonywana za pośrednictwem wskaźnika na podobiekt inicjalizowana jest tylko dla klasy bazowej. Własność ta nie zależy od tego czy klasa bazowa ma metody wirtualne, czy też nie.

98 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definiowanie destruktorów wirtualnych struct FiguraGeometryczna // FiguraGeometryczna( ) cout << Konstruktor: FiguraGeometryczna << endl; virtual FiguraGeometryczna( ) cout << Destruktor: FiguraGeometryczna << endl;..... struct Kwadrat: FiguraGeometryczna // Kwadrat( ) cout << Konstruktor: Kwadrat << endl; virtual Kwadrat( ) cout << Destruktor: Kwadrat << endl;..... FiguraGeometryczna wobfig = new Kwadrat( ); delete wobfig;

99 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definiowanie destruktorów wirtualnych struct FiguraGeometryczna // FiguraGeometryczna( ) cout << Konstruktor: FiguraGeometryczna << endl; virtual FiguraGeometryczna( ) cout << Destruktor: FiguraGeometryczna << endl;..... struct Kwadrat: FiguraGeometryczna // Kwadrat( ) cout << Konstruktor: Kwadrat << endl; virtual Kwadrat( ) cout << Destruktor: Kwadrat << endl;..... FiguraGeometryczna wobfig = new Kwadrat( ); delete wobfig;

100 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definiowanie destruktorów wirtualnych struct FiguraGeometryczna // FiguraGeometryczna( ) cout << Konstruktor: FiguraGeometryczna << endl; virtual FiguraGeometryczna( ) cout << Destruktor: FiguraGeometryczna << endl;..... struct Kwadrat: FiguraGeometryczna // Kwadrat( ) cout << Konstruktor: Kwadrat << endl; virtual Kwadrat( ) cout << Destruktor: Kwadrat << endl;..... FiguraGeometryczna wobfig = new Kwadrat( ); delete wobfig;

101 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definiowanie destruktorów wirtualnych struct FiguraGeometryczna // FiguraGeometryczna( ) cout << Konstruktor: FiguraGeometryczna << endl; virtual FiguraGeometryczna( ) cout << Destruktor: FiguraGeometryczna << endl;..... struct Kwadrat: FiguraGeometryczna // Kwadrat( ) cout << Konstruktor: Kwadrat << endl; virtual Kwadrat( ) cout << Destruktor: Kwadrat << endl;..... FiguraGeometryczna wobfig = new Kwadrat( ); delete wobfig;

102 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definiowanie destruktorów wirtualnych struct FiguraGeometryczna // FiguraGeometryczna( ) cout << Konstruktor: FiguraGeometryczna << endl; virtual FiguraGeometryczna( ) cout << Destruktor: FiguraGeometryczna << endl;..... struct Kwadrat: FiguraGeometryczna // Kwadrat( ) cout << Konstruktor: Kwadrat << endl; virtual Kwadrat( ) cout << Destruktor: Kwadrat << endl;..... FiguraGeometryczna wobfig = new Kwadrat( ); delete wobfig; Wynik działania: Konstruktor: FiguraGeometryczna Konstruktor: Kwadrat Destruktor: Kwadrat Destruktor: FiguraGeometryczna

103 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definiowanie destruktorów wirtualnych struct FiguraGeometryczna // FiguraGeometryczna( ) cout << Konstruktor: FiguraGeometryczna << endl; virtual FiguraGeometryczna( ) cout << Destruktor: FiguraGeometryczna << endl;..... struct Kwadrat: FiguraGeometryczna // Kwadrat( ) cout << Konstruktor: Kwadrat << endl; virtual Kwadrat( ) cout << Destruktor: Kwadrat << endl;..... FiguraGeometryczna wobfig = new Kwadrat( ); delete wobfig; Wynik działania: Konstruktor: FiguraGeometryczna Konstruktor: Kwadrat Destruktor: Kwadrat Destruktor: FiguraGeometryczna

104 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definiowanie destruktorów wirtualnych struct FiguraGeometryczna // FiguraGeometryczna( ) cout << Konstruktor: FiguraGeometryczna << endl; virtual FiguraGeometryczna( ) cout << Destruktor: FiguraGeometryczna << endl;..... struct Kwadrat: FiguraGeometryczna // Kwadrat( ) cout << Konstruktor: Kwadrat << endl; virtual Kwadrat( ) cout << Destruktor: Kwadrat << endl;..... FiguraGeometryczna wobfig = new Kwadrat( ); delete wobfig; Wynik działania: Konstruktor: FiguraGeometryczna Konstruktor: Kwadrat Destruktor: Kwadrat Destruktor: FiguraGeometryczna

105 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Definiowanie destruktorów wirtualnych struct FiguraGeometryczna // FiguraGeometryczna( ) cout << Konstruktor: FiguraGeometryczna << endl; virtual FiguraGeometryczna( ) cout << Destruktor: FiguraGeometryczna << endl;..... struct Kwadrat: FiguraGeometryczna // Kwadrat( ) cout << Konstruktor: Kwadrat << endl; virtual Kwadrat( ) cout << Destruktor: Kwadrat << endl;..... FiguraGeometryczna wobfig = new Kwadrat( ); delete wobfig; Wynik działania: Konstruktor: FiguraGeometryczna Konstruktor: Kwadrat Destruktor: Kwadrat Destruktor: FiguraGeometryczna Wprowadzenie destruktora wirtualnego umożliwia właściwą destrukcję obiektu. Obiekt w momencie destrukcji wie, że jest częścią większej całości.

106 Podsumowanie Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Polimorfizm (wielopostaciowość) jest jedną z ważniejszych cech programowania obiektowego. Wraz z dziedziczeniem jest on podstawowym mechanizmem wykorzystywanym przy tworzeniu bibliotek obiektowo zorientowanych. Polimorfizm wraz z możliwością niejawnego rzutowaniem w górę pozwala tworzyć uniwersalne narzędzia dla wszystkich obiektów należących do klas dziedziczących daną klasę bazową. Destruktory wirtualne wspierają operacje na obiektach tworzonych dynamicznie. Dzięki niejawnemu rzutowaniu w górę w narzędziach stworzonych dla klasy bazowej, obiekty te można bezpiecznie poddawać destrukcji. udostępniają wygodny mechanizm tworzenia własnego systemu identyfikacji typu w trakcie działania programu.

107 Podsumowanie Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Polimorfizm (wielopostaciowość) jest jedną z ważniejszych cech programowania obiektowego. Wraz z dziedziczeniem jest on podstawowym mechanizmem wykorzystywanym przy tworzeniu bibliotek obiektowo zorientowanych. Polimorfizm wraz z możliwością niejawnego rzutowaniem w górę pozwala tworzyć uniwersalne narzędzia dla wszystkich obiektów należących do klas dziedziczących daną klasę bazową. Destruktory wirtualne wspierają operacje na obiektach tworzonych dynamicznie. Dzięki niejawnemu rzutowaniu w górę w narzędziach stworzonych dla klasy bazowej, obiekty te można bezpiecznie poddawać destrukcji. udostępniają wygodny mechanizm tworzenia własnego systemu identyfikacji typu w trakcie działania programu.

108 Podsumowanie Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Polimorfizm (wielopostaciowość) jest jedną z ważniejszych cech programowania obiektowego. Wraz z dziedziczeniem jest on podstawowym mechanizmem wykorzystywanym przy tworzeniu bibliotek obiektowo zorientowanych. Polimorfizm wraz z możliwością niejawnego rzutowaniem w górę pozwala tworzyć uniwersalne narzędzia dla wszystkich obiektów należących do klas dziedziczących daną klasę bazową. Destruktory wirtualne wspierają operacje na obiektach tworzonych dynamicznie. Dzięki niejawnemu rzutowaniu w górę w narzędziach stworzonych dla klasy bazowej, obiekty te można bezpiecznie poddawać destrukcji. udostępniają wygodny mechanizm tworzenia własnego systemu identyfikacji typu w trakcie działania programu.

109 Podsumowanie Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Polimorfizm (wielopostaciowość) jest jedną z ważniejszych cech programowania obiektowego. Wraz z dziedziczeniem jest on podstawowym mechanizmem wykorzystywanym przy tworzeniu bibliotek obiektowo zorientowanych. Polimorfizm wraz z możliwością niejawnego rzutowaniem w górę pozwala tworzyć uniwersalne narzędzia dla wszystkich obiektów należących do klas dziedziczących daną klasę bazową. Destruktory wirtualne wspierają operacje na obiektach tworzonych dynamicznie. Dzięki niejawnemu rzutowaniu w górę w narzędziach stworzonych dla klasy bazowej, obiekty te można bezpiecznie poddawać destrukcji. udostępniają wygodny mechanizm tworzenia własnego systemu identyfikacji typu w trakcie działania programu.

110 Plan prezentacji Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów 1 Rzutowanie Rzutowanie w górę Rzutowaie w dół Rzutowanie w liście parametrów wywołania funkcji/metody 2 Utrata informacji przy rzutowaniu w górę 3 Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

111 Sformułowanie problemu Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów Należy stworzyć jedną listę obiektów reprezentujących różne figury geometryczne.

112 Diagram klas Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

113 Diagram klas Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

114 Diagram klas Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

115 Diagram klas Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

116 Diagram klas Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

117 Diagram klas Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

118 Diagram klas Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

119 Diagram klas Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

120 Diagram klas Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

121 Diagram klas Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

122 Diagram klas Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów

123 Definicje klas figur geometrycznych Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów struct FiguraGeometryczna // virtual const char NazwaFigury( ) const return Figura ; virtual FiguraGeometryczna( )....

124 Definicje klas figur geometrycznych Definiowanie metod wirtualnych Destruktory wirtualne Lista obiektów różnych typów struct FiguraGeometryczna // virtual const char NazwaFigury( ) const return Figura ; virtual FiguraGeometryczna( )....

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

Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska

Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska Qt sygnały i sloty Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera

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

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

Rzutowanie i konwersje

Rzutowanie i konwersje Rzutowanie i konwersje Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2013 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania

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

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

Wprowadzenie do szablonów klas

Wprowadzenie do szablonów 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 2008-2010 Bogdan Kreczmer Niniejszy

Bardziej szczegółowo

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

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

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

Przestrzenie nazw. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Przestrzenie nazw. 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

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

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

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

Schemat konstrukcja pliku Makefile

Schemat konstrukcja pliku Makefile Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2008 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

Qt sygnały i designer

Qt sygnały i designer Qt sygnały i designer Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2015 Bogdan

Bardziej szczegółowo

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji 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

Pola i metody statyczne

Pola i metody statyczne Pola i metody statyczne Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2009 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania

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

Referencje do zmiennych i obiektów

Referencje do zmiennych i obiektów Referencje do zmiennych i obiektów 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

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

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji Wartości domyślne, przeciażenia funkcji 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.

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie obiektowe, wykład nr 6. Klasy i obiekty Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto

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

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

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

Lista dwukierunkowa - przykład implementacji destruktorów

Lista dwukierunkowa - przykład implementacji destruktorów Lista dwukierunkowa - przykład implementacji destruktorów Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2008 Bogdan Kreczmer Niniejszy dokument zawiera

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

Operacje wejścia/wyjścia (odsłona druga) - pliki

Operacje wejścia/wyjścia (odsłona druga) - pliki Operacje wejścia/wyjścia (odsłona druga) - pliki 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

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

Klasa, metody, rozwijanie w linii

Klasa, metody, rozwijanie w linii 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

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

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

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

Praca z aplikacją designer

Praca z aplikacją designer Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2014 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost; Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze

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

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

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

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

Programowanie, część I

Programowanie, część I Programowanie, część I Rafał J. Wysocki Instytut Fizyki Teoretycznej, Wydział Fizyki UW 22 lutego 2011 Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 22 lutego 2011 1 / 80 Wstęp Informacje organizacyjne

Bardziej szczegółowo

Klasa, metody, rozwijanie w linii

Klasa, metody, rozwijanie w linii Klasa, metody, rozwijanie w linii 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

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

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

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

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

Dalmierze optyczne. Bogdan Kreczmer. bogdan.kreczmer@pwr.wroc.pl

Dalmierze optyczne. Bogdan Kreczmer. bogdan.kreczmer@pwr.wroc.pl Dalmierze optyczne Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2013 Bogdan Kreczmer

Bardziej szczegółowo

Czujniki PSD i dalmierze triangulacyjne

Czujniki PSD i dalmierze triangulacyjne Czujniki PSD i dalmierze triangulacyjne Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechniki Wrocławskiej Kurs: Copyright c 2015 Bogdan Kreczmer

Bardziej szczegółowo

Obiekty i metody stałe

Obiekty i metody stałe Obiekty i metody stałe 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

Bardziej szczegółowo

Materiały do zajęć VII

Materiały do zajęć VII Spis treści I. Klasy Materiały do zajęć VII II. III. Konstruktor Właściwości i indeksatory Klasy Programowanie obiektowe wiadomości wstępne Paradygmat programowania obiektowego Abstrakcja Hermetyzacja

Bardziej szczegółowo

Zasoby, pliki graficzne

Zasoby, pliki graficzne Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska Kurs: Copyright c 2017 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu

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

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Wprowadzenie do UML, przykład użycia kolizja

Wprowadzenie do UML, przykład użycia kolizja Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2012 Bogdan Kreczmer Niniejszy dokument

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

Przesłanianie nazw, przestrzenie nazw

Przesłanianie nazw, przestrzenie nazw Przesłanianie nazw, przestrzenie nazw Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2013 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu

Bardziej szczegółowo

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

ATD. Wykład 8. Programowanie (język C++) abstrakcyjny typ danych. Abstrakcyjne typy danych (ATD) Metody czysto wirtualne. Definicje i uwagi: 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

Bardziej szczegółowo

Czujniki PSD i dalmierze triangulacyjne

Czujniki PSD i dalmierze triangulacyjne Czujniki PSD i dalmierze triangulacyjne Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechniki Wrocławskiej Kurs: Copyright c 2016 Bogdan Kreczmer

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 3 - polimorfizm. dr inż. Robert Nowak - p. 1/14 Powtórzenie Powtórzenie: klasy autonomiczne: konstruktor, konstruktor kopiujacy, operator przypisania, destruktor

Bardziej szczegółowo

Abstrakcyjny typ danych

Abstrakcyjny typ danych Abstrakcyjny typ danych Abstrakcyjny Typ Danych (abstract data type-adt): zbiór wartości wraz z powiązanymi z nimi operacjami; operacje są zdefiniowane w sposób niezależny od implementacji; operacje są

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

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,

Bardziej szczegółowo

Hermetyzacja oraz pola i metody statyczne

Hermetyzacja oraz pola i metody statyczne Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2010 Bogdan Kreczmer Niniejszy dokument

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d. Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 7 Przegląd typów strukturalnych - klasy i obiekty - c.d. Klasa - powtórzenie

Bardziej szczegółowo

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java - tablice, konstruktory, dziedziczenie i hermetyzacja Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Pojęcie struktury i klasy. Konstruktor i destruktor. Spotkanie 08 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Spotkanie 08 Klasy: definicja a deklaracja klasy dane składowe

Bardziej szczegółowo

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 6.11.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 6.11.2006 1 / 138 Operator przypisania Jest czym innym niż konstruktor kopiujacy!

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

Programowanie obiektowe i zdarzeniowe

Programowanie obiektowe i zdarzeniowe Marek Tabędzki Programowanie obiektowe i zdarzeniowe 1/23 Programowanie obiektowe i zdarzeniowe wykład 6 polimorfizm Na poprzednim wykładzie: dziedziczenie jest sposobem na utworzenie nowej klasy na podstawie

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 Przeciążanie operatorów Słowo

Bardziej szczegółowo

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów Rok akademicki 2016/2017, Wykład nr 5 2/40 Plan wykładu nr 5 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2016/2017

Bardziej szczegółowo

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji Politechnika Białostocka Wydział Elektryczny Katedra Telekomunikacji i Aparatury Elektronicznej Instrukcja do pracowni specjalistycznej z przedmiotu Obiektowe programowanie aplikacji Kod przedmiotu: TS1C410201

Bardziej szczegółowo

Papyrus. Papyrus. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Papyrus. Papyrus. Katedra Cybernetyki i Robotyki Politechnika Wrocławska Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Zaawansowane metody programowania Copyright c 2014 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania

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

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

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

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

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

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

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe 10.04.2017 W slajdach są materiały zapożyczone z https://www.ii.uni.wroc.pl/~prz/2012lato/cpp/slajdy/cpp5.ppt Przykład wykorzystania obiektu Obiekt X jest instancją klasy Y Obiekt

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

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

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

Wprowadzenie do programowanie obiektowego w języku C++

Wprowadzenie do programowanie obiektowego w języku C++ Wprowadzenie do programowanie obiektowego w języku C++ Część czwarta Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura

Bardziej szczegółowo

Informatyka II Laboratorium 3 : Programowania obiektowe C++ - dziedziczenie

Informatyka II Laboratorium 3 : Programowania obiektowe C++ - dziedziczenie Materiały: Informatyka II Laboratorium : Programowania obiektowe C++ - dziedziczenie Książka: Symfonia C++, Jerzy Grębosz. Wykład: www.materialy.prz-rzeszow.pl, Informatyka II, dr Wojciech Rząsa. Zasoby

Bardziej szczegółowo

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami

Bardziej szczegółowo

Język C++ Programowanie obiektowe

Język C++ Programowanie obiektowe Język C++ Programowanie obiektowe Cechy programowania obiektowego abstrakcyjne typy danych hermetyczność obiektów (kapsułkowanie) dziedziczenie polimorfizm Programowanie proceduralne vs. programowanie

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

Bardziej szczegółowo

Weryfikatory, zasoby graficzne

Weryfikatory, zasoby graficzne , zasoby graficzne Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska Kurs: Copyright c 2019 Bogdan Kreczmer Niniejszy dokument zawiera

Bardziej szczegółowo

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej

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

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc Rok akademicki 2016/2017, Wykład nr 4 2/45 Plan wykładu nr 4 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2016/2017

Bardziej szczegółowo

Style programowania - krótki przeglad

Style programowania - krótki przeglad 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 Obiektowo Zorientowane w języku c++ Konstruktory

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory Programowanie Obiektowo Zorientowane w języku c++ Konstruktory Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej Katedra

Bardziej szczegółowo

Diagramy UML, przykład problemu kolizji

Diagramy UML, przykład problemu kolizji Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska Kurs: Copyright c 2015 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu

Bardziej szczegółowo

Szablon klasy std::vector

Szablon klasy std::vector Szablon klasy std::vector 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

Bardziej szczegółowo