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

Podobne dokumenty
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. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

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 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

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

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

dr inż. Jarosław Forenc

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

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

Mechanizm dziedziczenia

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

Dziedziczenie. Ogólna postać dziedziczenia klas:

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

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

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

Programowanie obiektowe

Wyliczanie wyrażenia obiekty tymczasowe

Dziedziczenie jednobazowe, poliformizm

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

TEMAT : KLASY DZIEDZICZENIE

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP)

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM

Zaawansowane programowanie w języku C++ Programowanie obiektowe

> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Konstruktor kopiujacy

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Wykład 8: klasy cz. 4

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

Informatyka 2. Wykład nr 3 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

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

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

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

tel Konsultacje www

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

PARADYGMATY PROGRAMOWANIA Wykład 4

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

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

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

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

Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h

Wstęp do programowania obiektowego

Mechanizm dziedziczenia

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

Wprowadzenie do programowanie obiektowego w języku C++

Podstawy Programowania Obiektowego

PARADYGMATY PROGRAMOWANIA Wykład 2

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

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

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

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

Programowanie obiektowe w języku

Wykład 5: Klasy cz. 3

PARADYGMATY PROGRAMOWANIA Wykład 3

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

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

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

Programowanie Obiektowe i C++

Język C++ wykład VIII

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

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

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

Laboratorium 1 - Programowanie proceduralne i obiektowe

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

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

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji

Wstęp do Programowania 2

Programowanie Obiektowe i C++

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

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

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

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

Podstawy Programowania Obiektowego

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

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

Programowanie Obiektowo Zorientowane w języku c++ Konstruktory

Konstruktor destruktor Programowanie obiektowe

Technologie i usługi internetowe cz. 2

Wstęp do Programowania 2

Materiały do zajęć VII

Programowanie Obiektowew języku C++ Zadania L9

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

Enkapsulacja, dziedziczenie, polimorfizm

Język C++ Programowanie obiektowe

Programowanie komputerowe. Zajęcia 7

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

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

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

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

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

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

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

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

Zaawansowane programowanie w języku C++ Klasy w C++

C++ - [4-7] Polimorfizm

Transkrypt:

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 plus funkcje składowe (metody) K.Grzelak (Wykład 13) Programowanie w C++ 2 / 26

Konstruktory i destruktory - powtórzenie Konstruktory i destruktory to specjalne funkcje składowe klasy Konstruktor wywoływany jest przy tworzeniu obiektu Konstruktor kopiujacy wywoływany jest przy tworzeniu kopii obiektu Destruktor wywoływany jest przed likwidacja obiektu K.Grzelak (Wykład 13) Programowanie w C++ 3 / 26

Konstruktor kopiujacy vs operator przypisania Tutaj uruchamiany jest konstruktor kopiujacy: Wektor2D v1; Wektor2D v2(v1); Wektor2D v3=v1; Tutaj działa operator przypisania (!): Wektor2D v1(0.5,0.2,1.5,0.8); Wektor2D v2; v2=v1; Wektor2D - klasa z poprzednich wykładów. K.Grzelak (Wykład 13) Programowanie w C++ 4 / 26

Przeładowanie operatorów - przypomnienie Przeładowanie operatorów to przedefiniowanie standardowych operatorów: +,,, /,... tak, żeby działały dla obiektów danej klasy. K.Grzelak (Wykład 13) Programowanie w C++ 5 / 26

Przeładowanie operatorów - przypomnienie Przeładowane operatory nie musza mieć znaczenia podobnego do oryginalnego, np.: + nie musi służyć do dodawania obiektów K.Grzelak (Wykład 13) Programowanie w C++ 6 / 26

Operator przypisania Operator przypisania służy do przypisania zawartości jednego obiektu klasy T drugiemu obiektowi tej klasy: T& T::operator=(T &); np. Wektor2D v1(0.5,0.2,1.5,0.8); Wektor2D v2; v2=v1; K.Grzelak (Wykład 13) Programowanie w C++ 7 / 26

Operator przypisania Jeśli w definicji klasy nie ma zdefiniowanego operatora przypisania, to zostanie stworzony automatycznie. Kiedy to nie będzie wystarczajace: Przykład Wskaźnik do dynamicznej tablicy jest składnikiem obiektu Tablica nie jest częścia obiektu Przypisanie starego wskaźnika nowemu oznacza że oba obiekty będa korzystać z tej samej tablicy! Rozwiazanie: operator przypisania, który tworzy nowa tablicę (podobnie w przypadku konstruktora kopiujacego) K.Grzelak (Wykład 13) Programowanie w C++ 8 / 26

Dziedziczenie K.Grzelak (Wykład 13) Programowanie w C++ 9 / 26

Klasy pochodne i podstawowe Dziedziczenie = definiowanie nowej klasy przy wykorzystaniu wcześniej istniejacej klasy Klasa pochodna dziedziczy składniki (funkcjonalności!) klasy podstawowej, ale może mieć nowe dane i funkcje składowe. K.Grzelak (Wykład 13) Programowanie w C++ 10 / 26

Klasy pochodne i podstawowe Przykłady klas podstawowych i pochodnych: Klasa podstawowa Owoc Samochod ios ostream Klasy pochodne Jablko, Gruszka Kabriolet, SUV, TIR istream, ostream ofstream, ostringstream, iostream Podobieństwa pomiędzy praca z różnymi rodzajami strumieni nieprzypadkowe! K.Grzelak (Wykład 13) Programowanie w C++ 11 / 26

Jak zdefiniować klasę która jest pochodna innej klasy Klasa podstawowa może wygladać np. tak: class Mebel { public: Mebel(string, int); int get_rok_produkcji() const ; void opis() const ;... private: string producent; int rok_produkcji; }; K.Grzelak (Wykład 13) Programowanie w C++ 12 / 26

Jak zdefiniować klasę która jest pochodna innej klasy Klasa pochodna od klasy Mebel może wygladać np. tak: class Komoda : public Mebel { public: Komoda(string, int, string); void opis() const ;...private: string model; int ile_szuflad; } Komoda jest rodzajem mebla. K.Grzelak (Wykład 13) Programowanie w C++ 13 / 26

Klasy pochodne i podstawowe - zasłanianie nazw W obu klasach moga być składniki o tej samej nazwie: składnik z klasy pochodnej zasłania odziedziczony składnik, ale do obu można się odwołać: Komoda k1; k1.opis(); k1.mebel::opis(); K.Grzelak (Wykład 13) Programowanie w C++ 14 / 26

Dziedziczenie składników różnego typu O czym decyduje klasa podstawowa, czyli w jaki sposób dziedziczone sa składniki public, protected i private: Klas pochodna nie ma dostępu tylko do prywatnych składników klasy podstawowej. K.Grzelak (Wykład 13) Programowanie w C++ 15 / 26

Dziedziczenie składników różnego typu Trzeci rodzaj typu składników klasy protected: składniki występujace w klasie podstawowej za słowem protected sa dostępne dla klas pochodnych jak publiczne. Dla innych sa jak prywatne. K.Grzelak (Wykład 13) Programowanie w C++ 16 / 26

Dziedziczenie składników różnego typu O czym decyduje klasa pochodna, czyli w jaki sposób klasa pochodna chce udostępniać światu dziedziczone składniki: W definicji klasy pochodnej: class Komoda : class Komoda : class Komoda : public Mebel protected Mebel private Mebel K.Grzelak (Wykład 13) Programowanie w C++ 17 / 26

Dziedziczenie składników różnego typu Można dziedziczyć po więcej niż jednej klasie: class Komoda : public Mebel, private Regal K.Grzelak (Wykład 13) Programowanie w C++ 18 / 26

Dziedziczenie Czy wszystko się dziedziczy? Nie. Klasa pochodna nie dziedziczy: prywatnych składników klasy podstawowej konstruktorów destruktorów operatorów przypisania K.Grzelak (Wykład 13) Programowanie w C++ 19 / 26

Dziedziczenie Klasa, która jest pochodna jednej klasy, sama może być klasa podstawowa innej klasy, np.: ios ostream ofstream K.Grzelak (Wykład 13) Programowanie w C++ 20 / 26

Kolejność w jakiej wywoływane sa konstruktory Kolejność uruchamiania: 1 konstruktory obiektów będacych składnikami klasy podstawowej 2 konstruktor klasy podstawowej 3 konstruktory obiektów będacych składnikami klasy pochodnej 4 konstruktor klasy pochodnej K.Grzelak (Wykład 13) Programowanie w C++ 21 / 26

Jeszcze o konstruktorach Na liście inicjalizacyjnej konstruktora klasy pochodnej można umieścić wywołanie konstruktora klasy podstawowej. K.Grzelak (Wykład 13) Programowanie w C++ 22 / 26

Przykład Klasa podstawowa class Zwierze { public: Zwierze(){ } Zwierze(string nazwa) {gromada=nazwa;}... protected: string gromada; string gatunek; string imie; int rok_urodzenia; }; K.Grzelak (Wykład 13) Programowanie w C++ 23 / 26

Przykład Klasa pochodna class Kot : public Zwierze { public: Kot(){} Kot(string nazwa); string getgromada() const {return gromada;} string getgatunek() const {return gatunek;}... }; Kot::Kot(string nazwa) : Zwierze( ssak ) { imie=nazwa; gatunek= kot_domowy ; } K.Grzelak (Wykład 13) Programowanie w C++ 24 / 26

Przykład Program int main(){ Kot kot1( Filemon ); cout «gromada= «kot1.getgromada() «endl; cout «gatunek= «kot1.getgatunek() «endl; return 0; } K.Grzelak (Wykład 13) Programowanie w C++ 25 / 26

Zalety dziedziczenia Unikanie wielokrotnego pisania tych samych lub podobnych fragmentów kodu Możliwość dostosowania kodu do zmieniajacych się wymagań bez zmiany głównej części programu Możliwość tworzenia hierarchii klas, wyrażanie zależności między klasami... K.Grzelak (Wykład 13) Programowanie w C++ 26 / 26