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

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

Programowanie Obiektowew języku C++ Zadania L4

Programowanie Obiektowew języku C++ Zadania L9

Programowanie Obiektowew języku C++ Zadania L8

Programowanie Obiektowew języku C++ Zadania L2

Podstawy programowania w języku C++ Zadania

Programowanie Obiektowew języku C++ Zadania L2

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

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

Plik klasy. h deklaracje klas

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory

C++ - [4-7] Polimorfizm

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

PARADYGMATY PROGRAMOWANIA Wykład 4

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

TEMAT : KLASY DZIEDZICZENIE

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

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

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

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

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

Programowanie komputerowe. Zajęcia 7

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

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

dr inż. Jarosław Forenc

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Techniki Programowania wskaźniki

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

TEMAT : KLASY POLIMORFIZM

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

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

Programowanie obiektowe w języku

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

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Programowanie Obiektowe i C++

Wstęp do programowania obiektowego, wykład 7

Dziedziczenie Dana jest klasa Punkt w pliku o nazwie Punkt.java:

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

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

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

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

Technologie i usługi internetowe cz. 2

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

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

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

Wyliczanie wyrażenia obiekty tymczasowe

Programowanie obiektowe w C++ Wykład 12

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

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

Języki i metody programowania Java Lab2 podejście obiektowe

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

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

Mechanizm dziedziczenia

Programowanie proceduralne w języku C++ Funkcje

Dziedziczenie. Ogólna postać dziedziczenia klas:

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

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

Programowanie obiektowe i zdarzeniowe

Listy powiązane zorientowane obiektowo

Dziedziczenie jednobazowe, poliformizm

Programowanie obiektowe

Programowanie, część I

Programowanie proceduralne w języku C++ Podstawy

Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie:

Projektowanie obiektowe. Roman Simiński Polimorfizm

Wprowadzenie do programowanie obiektowego w języku C++

Programowanie Obiektowe i C++

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

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

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

Mechanizm dziedziczenia

Laboratorium nr 10. Temat: Funkcje cz.2.

Materiały do zajęć VII

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Zaawansowane programowanie w C++ (PCP)

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

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

Podstawy Programowania Obiektowego

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

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

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

DOSTĘP DO METOD I ZMIENNYCH. Dostęp do zmiennych (na podstawie:l.lemay,r.cadenhead,java 2 dla każdego, Helion 2001)

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

Szablony funkcji i szablony klas

Wykład 5 Okna MDI i SDI, dziedziczenie

Wstęp do Programowania 2

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

Język C++ wykład VIII

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Wykład 7. Klasy i obiekty

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

Programowanie, część I

PARADYGMATY PROGRAMOWANIA Wykład 3

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Wstęp do programowania obiektowego

Szablony klas, zastosowanie szablonów w programach

Transkrypt:

Podstawy programowania w języku C++ Zadania - dziedziczenie i polimorfizm 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 Maj 2017 Mirosław Głowacki (AGH, UJK) Podstawy programowania - dziedziczenie 2017 1 / 11

Spis treści 1 Zadania L7 2 Podpowiedzi do zadań L7 Mirosław Głowacki (AGH, UJK) Podstawy programowania - dziedziczenie 2017 2 / 11

Dziedziczenie i polimorfizm - L7/1-3 1 Zdefiniować klasę punkt zawierającą w zakresie publicznym: dwa pola przechowujące współrzędne punktu, konstruktor, metodę obliczającą odległość dwóch punktów. 2 Zdefiniować klasę figura zawierającą w zakresie publicznym: pole typu int przechowujące liczbę wierzchołków figury, dynamiczną tablicę przechowującą wierzchołki figury, konstruktor. 3 Zdefiniować klasę odcinek wywodzącą się z klasy figura zawierającą w zakresie publicznym: konstruktor, metodę obliczającą długość odcinka. Mirosław Głowacki (AGH, UJK) Podstawy programowania - dziedziczenie 2017 3 / 11

Dziedziczenie i polimorfizm - L7-4 4 Zdefiniować odpowiednie przeciążenia operatorów tak, aby całość kodu pozwoliła na wykonanie kodu programu: int main(){ punkt p[2] = { punkt(1., 2.), punkt(3., -3.) }; odcinek o(p); cout << " Odcinek o: " << o << " ma dlugosc= " << o.dlug() << endl; return 0; } oraz uzyskanie strumienia wyjściowego: Odcinek o: (1, 2) - (3, -3) ma dlugosc= 5.38516 Mirosław Głowacki (AGH, UJK) Podstawy programowania - dziedziczenie 2017 4 / 11

Dziedziczenie i polimorfizm - L7-5 5 Uzupełnić kod z poprzednich zadań, aby możliwe było wykonanie funkcji main() : double obwod(figura &f){return f.obwod();} int main(){ punkt p[] = { punkt(1., 2.), punkt(3., -3.), punkt(4., -3.), punkt(5., 3.) }; odcinek o(p); cout << " Odcinek o: " << o << " ma dlugosc= " << o.dlug() << endl; trojkat t(p); cout << "Obwod trojkata = " << obwod(t) << endl; czworokat c(p); cout << "Obwod trojkata = " << obwod(c) << endl; return 0; } Mirosław Głowacki (AGH, UJK) Podstawy programowania - dziedziczenie 2017 5 / 11

Spis treści 1 Zadania L7 2 Podpowiedzi do zadań L7 Mirosław Głowacki (AGH, UJK) Podstawy programowania - dziedziczenie 2017 6 / 11

Podpowiedzi do zadania L7/1-4 Definicja klasy punkt nie wymaga dodatkowych wyjaśnień. Klasa figura jest zaprojektowana tylko po to, aby inne klasy mogły z niej dziedziczyć - np. klasa odcinek. Dlatego ma zawierać pole typu int, w którym zapamiętamy liczbę wietzchołków. Same wierzchołki które są obiektami klasy punkt będzie zawierać tablica w o elementach typu punkt. Ponieważ rozmiar tej tablicy jest z góry nieznany - może to być 2 dla odcinka lub np. 100 dla stukąta - będzie to tablica dynamiczna, a klasa powinna zawierać m. in. pole-wskaźnik do tej tablicy: class figura{ public:... punkt *w;... }; Mirosław Głowacki (AGH, UJK) Podstawy programowania - dziedziczenie 2017 7 / 11

Podpowiedzi do zadania L7/1-4 Tablica powinna być zdefiniowana w konstruktorze, a zlikwidowana w destruktorze klasy figura. Uwolni to programistę od konieczności ręcznej likwidacji tablicy gdy przestanie być potrzebna. class figura{ public:... figura(int, punkt*); ~figura(){delete [] w;} } figura::figura(int n, punkt *p) : lwierzch(n){ w = new punkt[n]; for (int i = 0; i < lwierzch; i++) w[i] = p[i]; } Mirosław Głowacki (AGH, UJK) Podstawy programowania - dziedziczenie 2017 8 / 11

Podpowiedzi do zadania L7/1-4 Jak widzimy konstruktor klasy figura ma dwa jawne parametry: liczbę wierzcholków n i tablicę p obiektów typu punkt. Parametry takie przekaże mu konstruktor klasy odcinek (lub konstruktor innej klasy, która będzie dziedziczyć z klasy figura ) class odcinek : public figura{ public: odcinek(punkt *p) : figura(2, p){}... } }; Konstruktor odcinka otrzma zaś tablicę p z funkcji main() : odcinek o(p); Mirosław Głowacki (AGH, UJK) Podstawy programowania - dziedziczenie 2017 9 / 11

Podpowiedzi do zadania L7/1-4 Aby możliwa była instrukcja cout << o gdzie o jest obiektem klasy odcinek należy przeciążyć operator zrzucania do strumienia dla obiektów klasy odcinek. Powinien on używać przeciążonego wcześniej opratora dla klasy punkt postaci: ostream& operator<<(ostream& str, punkt p) { str << "(" << p.x << ", " << p.y << ")"; return str; } Mirosław Głowacki (AGH, UJK) Podstawy programowania - dziedziczenie 2017 10 / 11

Podpowiedzi do zadania L7/5 Rozwiązanie zadania wymaga polimorficznego zachowania przedstawionej w treści zadania funkcji obwod. Funkcja ta posługuje się metodą obwód pracującą w ciele funkcji na rzecz obiektu f - referencji typu figura. Funkcja obwód wywoływana jest w funkcji main() na rzecz obiektów dwóch różnych klas: trojkat i czworokat. trojkat t(p); cout << obwod(t); czworokat c(p); cout << obwod(c); Aby to było możliwe polimorfizm musi działać, czyli: Klasa figura musi posiadać wirtualną metodę virtual double obwod(){};, Klasy trojkat i czworakat muszą dziedziczyć z klasy figura oraz posiadać obliczające ich obwody metody double obwod(); o identycznym prototypie. Mirosław Głowacki (AGH, UJK) Podstawy programowania - dziedziczenie 2017 11 / 11