Programowanie Obiektowew języku C++ Zadania L9

Podobne dokumenty
Programowanie Obiektowew języku C++ Zadania L8

Programowanie Obiektowew języku C++ Zadania L2

Podstawy programowania w języku C++ Zadania - dziedziczenie i polimorfizm

Programowanie Obiektowew języku C++ Zadania L4

Programowanie Obiektowew języku C++ Zadania L2

Programowanie Obiektowew języku C++ Zadania L4

Podstawy programowania w języku C++ Zadania

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.

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

TEMAT : KLASY POLIMORFIZM

Programowanie obiektowe

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

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

Dziedziczenie & W slajdach są materiały zapożyczone z

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.

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

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

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 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32

Programowanie proceduralne w języku C++ Pętle, tablice

Programowanie proceduralne w języku C++ Podstawy

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

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

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

TEMAT : KLASY DZIEDZICZENIE

Laboratorium 2. Funkcje wirtualne

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

Programowanie proceduralne w języku C++ Pojęcia podstawowe - kod źródłowy

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

private - oznacza, że wszystkie elementy klasy bazowej zmieniają się w prywatne.

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

Tytuł pracy dyplomowej

Wyjątki (exceptions)

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

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

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory

dr inż. Jarosław Forenc

Wprowadzenie do programowania i programowanie obiektowe

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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 V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Mechanizm dziedziczenia

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

Pytania sprawdzające wiedzę z programowania C++

Szablon klasy std::vector

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

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Programowanie obiektowe

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

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

Plik klasy. h deklaracje klas

Język C++ wykład VIII

Wstęp do programowania

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

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

Język C++ Różnice między C a C++

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

PARADYGMATY PROGRAMOWANIA Wykład 2

Rzutowanie i konwersje

POLITECHNIKA POZNAŃSKA. Programowanie systemów informatycznych LAB 30h

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

Polimorfizm w pigułce

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

Techniki Programowania wskaźniki

obiekty funkcyjne - funktory

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

string Rodzaj[4]= {"TV ", "wieza ", "DVD ", "kino "}; string Producent[4]={"Phillips", "Sony ", "Sanyo ", "Samsung "};

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

Listy powiązane zorientowane obiektowo

Wstęp do programowania obiektowego, wykład 7

tel Konsultacje www

Wprowadzenie do programowania i programowanie obiektowe

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Programowanie obiektowe język C++

Programowanie proceduralne w języku C++ Funkcje

Projektowanie klas c.d. Projektowanie klas przykład

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Programowanie obiektowe w C++ Wykład 12

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

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

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

Technologie cyfrowe semestr letni 2018/2019

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM

Wstęp do Programowania 2

Programowanie 2. Język C++. Wykład Relacje między klasami, klasy zagnieŝdŝone, klasy lokalne

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

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Referencje do zmiennych i obiektów

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

Programowanie - wykład 4

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

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

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

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

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

Wstęp do Informatyki

Transkrypt:

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 Stosowanej i Modelowania 2 Uniwersytet im. Jana Kochanowskiego w Kielcach Wydział Matematyczno-Przyrodnmiczy Instytut Fizyki Zakład Informatyki Styczeń 2019 Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2019 1 / 14

Spis treści 1 Zadanie L9 2 Podpowiedzi do zadań L9 3 Przykładowe rozwiązanie zadania L9 Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2019 2 / 14

Zadanie L9 Zmodyfikuj program utworzony w ramach zadań L8 (dotyczącego dziedziczenia) tak, aby był on polimorficzny. Dadaj funkcję globalną Zyj w postaci: void Zyj(Zwierze &zwierze){ cout << &zwierze; zwierze.oddychaj(); zwierze.patrz(); zwierze.ruszaj(); } Zmodyfikuj (uprość) funkcję main zgodnie z poniższym kodem: int main(){ Ryba Losos; Losos.Opis("Ryba losos", 2, 3.5); Zyj(Losos); Ptak Wrobel; Wrobel.Opis("Wrobel", 1, 0.05); Zyj(Wrobel); Pies Azor; Azor.Opis(); Zyj(Azor); return 0;} Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2019 3 / 14

Zadanie L9 --- Prezentuje zwierze: Ryba losos --- Wiek w latach: 2 Masa w kg: 3.5 Oddycham skrzelami Spogladam spod wody Plyne, bo lubie plywac --- Prezentuje zwierze: Wrobel --- Wiek w latach: 1 Masa w kg: 0.05 Oddycham powietrzem z wysoka Spogladam z gory na ziemie Lece, bo lubie latac --- Prezentuje zwierze: Pies Azor --- Wiek w latach: 1 Masa w kg: 12 Rasa: 4 Umaszczenie: 3 Oddycham powietrzem domowym Spogladam na mojego wlasciciela Biegne, bo lubie biegac Wlasnie aportuje Hau, Hau Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2019 4 / 14

Spis treści 1 Zadanie L9 2 Podpowiedzi do zadań L9 3 Przykładowe rozwiązanie zadania L9 Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2019 5 / 14

Podpowiedzi do zadań L9 Parametrem funkcji funkcji Zyj jest referencja, a więc może się ona zachowywać polimorficznie. Pierwsza linia kodu tej funkcji zawiera instrukcję, która odwołuje się do przeciążonego operatora strumienia wyjściowego dla wskaźnika &zwierze. Operator ten powinien mieć zatem deklarację: ostream& operator<<(ostream& Strum, Zwierze *zwierze); co umożliwia mu również zachowanie polimorficzne. Zatem funkcji Zyj można przesyłać obiekty klas pochodnych od zwierze, a operatorowi << wskaźniki do tych klas. Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2019 6 / 14

Podpowiedzi do zadań L9 operator<< powinien dodatkowo zawierać warunkowy blok instrukcji, który pozwoli na wypisanie dodatkowych informacji w przypadku, gdy jest to konieczne. W warunkach zadania konieczność taka istnieje dla obiektów klasy Pies. Blok warunkowy może w tym przypadku wyglądać np. tak: Pies *ps = dynamic_cast<pies*>(zwierze); if (ps){ Strum << " Rasa: " << ps->rasa() << endl; Strum << " Umaszczenie: " << ps->kolorsiersci() << endl;} Przy okazji zwóćmy uwagę, że przedstawiony fragment kodu wykorzystuje rzutowanie dynamiczne, a więc rzutowanie w dół hierarchii w trakcie wykonywania programu Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2019 7 / 14

Spis treści 1 Zadanie L9 2 Podpowiedzi do zadań L9 3 Przykładowe rozwiązanie zadania L9 Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2019 8 / 14

Przykładowe rozwiązanie zadania L9 #include <iostream> #include <string> using namespace std; class Zwierze { protected: double masa; unsigned wiek; string nazwa; public: Zwierze(): wiek(0) {} virtual void Patrz() = 0; virtual void Oddychaj() = 0; virtual void Ruszaj() = 0; double Masa() const {return masa;} unsigned Wiek() const {return wiek;} string Nazwa() const {return nazwa;} void Opis(string nazwazw = "Zwierze", unsigned wiekzw = 1, double masazw = 1.f){nazwa = nazwazw; wiek = wiekzw; masa =masazw;} }; Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2019 9 / 14

Przykładowe rozwiązanie zadania L9 class Ryba : public Zwierze { public: void Plyn() {cout << "Plyne, bo lubie plywac" << endl;} void Patrz() {cout << "Spogladam spod wody" << endl;} void Oddychaj() {cout << "Oddycham skrzelami" << endl;} void Ruszaj() {Plyn();} }; class Ssak : public Zwierze { public: void Biegnij(){cout << "Biegne, bo lubie biegac" << endl;} void Patrz() {cout << "Spogladam na wprost" << endl;} void Oddychaj() {cout << "Oddycham powietrzem lesnym" << endl;} void Ruszaj() {Biegnij();} }; Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2019 10 / 14

Przykładowe rozwiązanie zadania L9 class Ptak : public Zwierze { public: void Lec() {cout << "Lece, bo lubie latac" << endl;} void Patrz(){cout << "Spogladam z gory na ziemie" << endl;} void Oddychaj() {cout << "Oddycham powietrzem z wysoka" << endl;} void Ruszaj() {Lec();} }; enum RasaPsa {Owczarek, Dog, Pudel, Szpic, Bernardyn}; enum Umaszczenie {Czarny, Bialy, Rudy, Szary}; class Pies : public Ssak { protected: RasaPsa rasa; Umaszczenie kolorsiersci; public: Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2019 11 / 14

Przykładowe rozwiązanie zadania L9 public: void Aportuj(){cout << "Wlasnie aportuje" << endl;} void Szczekaj(){cout << "Hau, Hau" << endl;} RasaPsa Rasa()const {return rasa;} void Rasa(RasaPsa rasaps){rasa = rasaps;} Umaszczenie KolorSiersci() const {return kolorsiersci;} void KolorSiersci(Umaszczenie kolps){kolorsiersci = kolps;} void Patrz(){cout << "Spoglądam na mojego właściciela" << endl;} void Oddychaj() {cout << "Oddycham powietrzem domowym" << endl;} void Ruszaj() {Biegnij(); Aportuj(); Szczekaj();} void Opis(string nazwazw = "Pies Azor", unsigned wiekzw = 1, double masazw= 12.f, RasaPsa rasaps = Bernardyn, Umaszczenie kolorps = Szary){ nazwa = nazwazw; wiek = wiekzw; masa =masazw; rasa = rasaps; kolorsiersci = kolorps;} }; Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2019 12 / 14

Przykładowe rozwiązanie zadania L9 ostream& operator<<(ostream& Strum, Zwierze *zwierze){ Strum << "--- Prezentuje zwierze: " << zwierze->nazwa() << " ---" << endl; Strum << "Wiek w latach: " << zwierze->wiek() << endl; Strum << " Masa w kg: " << zwierze->masa() << endl; Pies *ps = dynamic_cast<pies*>(zwierze); if (ps){ Strum << " Rasa: " << ps->rasa() << endl; Strum << " Umaszczenie: " << ps->kolorsiersci() << endl;} return Strum; } void Zyj(Zwierze &zwierze){ cout << &zwierze; zwierze.oddychaj(); zwierze.patrz(); zwierze.ruszaj(); } Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2019 13 / 14

Przykładowe rozwiązanie zadania L9 int main(){ Ryba Losos; Losos.Opis("Ryba losos", 2, 3.5); Zyj(Losos); Ptak Wrobel; Wrobel.Opis("Wrobel", 1, 0.05); Zyj(Wrobel); Pies Azor; Azor.Opis(); Zyj(Azor); } return 0; Mirosław Głowacki (AGH, UJK) Programowanie Obiektowe 2019 14 / 14