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



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

Programowanie obiektowe w języku

Programowanie w Języku C 2

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

Enkapsulacja, dziedziczenie, polimorfizm

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Podstawy Programowania Obiektowego

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

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

TEMAT : KLASY DZIEDZICZENIE

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

Dziedziczenie. Ogólna postać dziedziczenia klas:

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

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

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

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

Programowanie obiektowe

Programowanie Obiektowew języku C++ Zadania L9

PARADYGMATY PROGRAMOWANIA Wykład 4

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

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

Technologie i usługi internetowe cz. 2

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

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

Polimorfizm. dr Jarosław Skaruz

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Materiały do zajęć VII

Programowanie obiektowe - 1.

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

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

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

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Język programowania. Andrzej Bobyk

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

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

Dziedziczenie jednobazowe, poliformizm

C++/Konstruktor i destruktor

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

Zaawansowane programowanie w C++ (PCP)

dr inż. Jarosław Forenc

Klasa to byt programistyczny określający jakie właściwości i metody będą miały obiekty, które zostaną utworzone na jej podstawie.

Programowanie obiektowe

Wstęp do programowania obiektowego w języku C++

Mechanizm dziedziczenia

Programowanie obiektowe

Programowanie Obiektowew języku C++ Zadania L8

Programowanie obiektowe

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

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

Programowanie obiektowe

Zaawansowane programowanie w języku C++ Programowanie obiektowe

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

hierarchie klas i wielodziedziczenie

Szablony funkcji i szablony klas

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

Technologie cyfrowe semestr letni 2018/2019

Interfejsy i klasy wewnętrzne

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

PROE wykład 4 pozostałe operatory, forward declaration, dziedziczenie. dr inż. Jacek Naruniec

Wykład 9: Polimorfizm i klasy wirtualne

Wprowadzenie do szablonów szablony funkcji

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

Wprowadzenie do szablonów szablony funkcji

Java Język programowania

Wstęp do programowania

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

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

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

Dziedziczenie. Tomasz Borzyszkowski

Technologie cyfrowe semestr letni 2018/2019

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

C++ - [4-7] Polimorfizm

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

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

Projektowanie obiektowe. Roman Simiński Polimorfizm

Zaawansowane programowanie w C++ (PCP)

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

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Typy klasowe (klasy) 1. Programowanie obiektowe. 2. Założenia paradygmatu obiektowego:

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

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

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.

Wyjątki (exceptions)

Podstawy Języka Java

Język JAVA podstawy. Wykład 4, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Laboratorium nr 12. Temat: Struktury, klasy. Zakres laboratorium:

Język C++ zajęcia nr 2

Programowanie obiektowe

Dokumentacja do API Javy.

Podstawy programowania III

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

Funkcje wirtualne. Wskaźniki do klas pochodnych są podstawą dla funkcji wirtualnych i polimorfizmu dynamicznego.

Aplikacje w środowisku Java

.NET Klasy, obiekty. ciąg dalszy

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 obiektowe i zdarzeniowe

Wykład 5: Klasy cz. 3

Transkrypt:

C++/Dziedziczenie 1 C++/Dziedziczenie Wstęp - Co to jest dziedziczenie Często podczas tworzenia klasy napotykamy na sytuację, w której klasa ta powiększa możliwości innej klasy, nierzadko precyzując jednocześnie jej funkcjonalność. Dziedziczenie daje nam możliwość wykorzystania nowych klas w oparciu o stare klasy. Nie należy jednak traktować dziedziczenia jedynie jako sposobu na współdzielenie kodu między klasami. Dzięki mechanizmowi rzutowania możliwe jest interpretowanie obiektu klasy tak, jakby był obiektem klasy z której się wywodzi. Umożliwia to skonstruowanie szeregu klas wywodzących się z tej samej klasy i korzystanie w przejrzysty i spójny sposób z ich wspólnych możliwości. Należy dodać, że dziedziczenie jest jednym z czterech elementów programowania obiektowego (obok abstrakcji, enkapsulacji i polimorfizmu). Klasę z której dziedziczymy nazywamy klasą bazową, zaś klasę, która po niej dziedziczy nazywamy klasą pochodną. Klasa pochodna może korzystać z funkcjonalności klasy bazowej i z założenia powinna rozszerzać jej możliwości (poprzez dodanie nowych metod, lub modyfikację metod klasy bazowej). Składnia Składnia dziedziczenia jest bardzo prosta. Przy definicji klasy należy zaznaczyć po których klasach dziedziczymy. Należy tu zaznaczyć, że C++ umożliwia Wielodziedziczenie, czyli dziedziczenie po wielu klasach na raz. Jest ono opisane w rozdziale Dziedziczenie wielokrotne. class nazwa_klasy :[operator_widocznosci] nazwa_klasy_bazowej, [operator_widocznosci] nazwa_klasy_bazowej definicja_klasy operator_widoczności może przyjmować jedną z trzech wartości:,,. Operator widoczności przy klasie, z której dziedziczymy pozwala ograniczyć widoczność elementów znych z klasy bazowej. - oznacza, że dziedziczone elementy (np. zmienne lub funkcje) mają taką widoczność jak w klasie bazowej. - oznacza, że elementy zne zmieniają się w chronione. - oznacza, że wszystkie elementy klasy bazowej zmieniają się w prywatne. brak operatora - oznacza, że niejawnie (domyślnie) zostanie wybrany operator..

C++/Dziedziczenie 2 Dostęp do elementów klasy bazowej można uzyskać jawnie w następujący sposób: [klasa_bazowa::]klasa_bazowa::element Zapis ten umożliwia dostęp do elementów klasy bazowej, które są "przykryte" przez elementy klasy nadrzędnej (mają takie same nazwy jak elementy klasy nadrzędnej). Jeżeli nie zaznaczymy jawnie o który element nam chodzi kompilator uzna że chodzi o element klasy nadrzędnej, o ile taki istnieje (przeszukiwanie będzie prowadzone w głąb aż kompilator znajdzie "najbliższy" element). Przykład 1 Definicja i sposób wykorzystania dziedziczenia Najczęstszym powodem korzystania z dziedziczenia podczas tworzenia klasy jest chęć sprecyzowania funkcjonalności jakiejś klasy wraz z implementacją tej funkcjonalności. Pozwala to na rozróżnianie obiektów klas i jednocześnie umożliwia stworzenie funkcji korzystających ze wspólnych cech tych klas. Załóżmy że piszemy program symulujący zachowanie zwierząt. Każde zwierze powinno móc jeść. Tworzymy odpowiednią klasę: class Zwierze : Zwierze(); void jedz(); Następnie okazuje się, że musimy zaimplementowac klasy Ptak i Ryba. Każdy ptak i ryba jest zwierzęciem. Oprócz tego ptak może latać, a ryba płynąć. Wykorzystanie dziedziczenia wydaje się tu naturalne. class Ptak : Zwierze : Ptak(); void lec(); class Ryba : Zwierze : Ryba(); void plyn(); Co istotne tworząc takie klasy możemy wywołać ich metodę pochodzącą z klasy Zwierze: Ptak ptak; ptak.jedz(); //metoda z klasy Zwierze ptak.lec(); //metoda z klasy Ptak Ryba *ryba=new Ryba(); ryba->jedz(); //metoda z klasy Zwierze

C++/Dziedziczenie 3 ryba->plyn(); //metoda z klasy Ryba Możemy też zrzutować obiekty klasy Ptak i Ryba na klasę Zwierze: Ptak *ptak=new Ptak(); Zwierze *zwierze; zwierze=ptak; zwierze->jedz(); Ryba ryba; ((Zwierze)ryba).jedz(); Jeżeli tego nie zrobimy, a rzutowanie jest potrzebne, kompilator sam wykona rzutowanie niejawne: Zwierze zwierzeta[2]; zwierzeta[0]=ryba(); //rzutowanie niejawne zwierzeta[1]=ptak(); //rzutowanie niejawne for (int i=0; i<2; ++i) zwierzeta[i].jedz(); Elementy chronione - operator widoczności Sekcja klasy jest ściśle związana z dziedziczeniem - elementy i metody klasy, które się w niej znajdują, mogą być swobodnie używane w klasie dziedzicznej ale poza klasą dziedziczną i klasą bazową nie są widoczne. Elementy powiązane z dziedziczeniem Chciałbym zwrócić uwagę na inne, bardzo istotne elementy dziedziczenia, które są opisane w następnych rozdziałach tego podręcznika, a które mogą być wręcz niezbędne w prawidłowym korzystaniu z dziedziczenia (przede wszystkim Funkcje wirtualne). Funkcje wirtualne Przykrywanie metod, czyli definiowanie metod w klasie pochodnej o nazwie i parametrach takich samych jak w klasie bazowej, ma zwykle na celu przystosowanie metody do nowej funkcjonalności klasy. Bardzo często wywołanie metody klasy bazowej może prowadzić wręcz do katastrofy, ponieważ nie bierze ona pod uwagę zmian miedzy klasą bazową a pochodną. Problem powstaje, kiedy nie wiemy jaka jest klasa nadrzędna obiektu, a chcielibyśmy żeby zawsze była wywoływana metoda klasy pochodnej. W tym celu język C++ posiada funkcje wirtualne. Są one opisane w rozdziale Funkcje wirtualne. Wielodziedziczenie - czyli dziedziczenie wielokrotne Język C++ umożliwia dziedziczenie po wielu klasach bazowych na raz. Proces ten jest opisany w rozdziale Dziedziczenie wielokrotne. Przykład 2 #include <iostream> class Zwierze :

C++/Dziedziczenie 4 Zwierze() void jedz( ) for ( int i=0; i<10; ++i ) std::cout << "Om Nom Nom Nom\n"; void pij( ) for ( int i=0; i<5; ++i ) std::cout << "Chlip, chlip\n"; void spij( ) std::cout << "Chrr\n"; class Pies : Zwierze : Pies() void szczekaj() std::cout << "Hau! hau!\n"; void warcz() std::cout << "Wrrrrrr\n"; Za pomocą class Pies : Zwierze utworzyliśmy klasę Psa, która dziedziczy klasę Zwierze. Dziedziczenie umożliwia przekazanie zmiennych, metod itp. z jednej klasy do drugiej. Możemy funkcję main zapisać w ten sposób:

C++/Dziedziczenie 5 int main() Pies burek; burek.jedz(); burek.pij(); burek.warcz(); burek.pij(); burek.szczekaj(); burek.spij(); return 0;

Źródła i autorzy artykułu 6 Źródła i autorzy artykułu C++/Dziedziczenie Źródło: http://pl.wikibooks.org/w/index.php?oldid=156456 Autorzy: Derbeth, DrJolo, Felix, Kj, Lethern, Maricn24, MonteChristof, Mythov, Piotr, Savh, Steeve, Teceha, Uniq, Wutsje, 41 anonimowych edycji Licencja Creative Commons Attribution-Share Alike 3.0 Unported //creativecommons.org/licenses/by-sa/3.0/