Dziedziczenie & W slajdach są materiały zapożyczone z https://www.ii.uni.wroc.pl/~prz/2012lato/cpp/slajdy/cpp5.

Podobne dokumenty
Programowanie obiektowe

Technologie cyfrowe semestr letni 2018/2019

Technologie cyfrowe semestr letni 2018/2019

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

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

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.

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

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 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

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

Język C++ wykład VIII

TEMAT : KLASY POLIMORFIZM

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

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

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

Dziedziczenie. Ogólna postać dziedziczenia klas:

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

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

Mechanizm dziedziczenia

Wstęp do programowania obiektowego

Wprowadzenie do programowanie obiektowego w języku C++

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

Programowanie obiektowe język C++

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

TEMAT : KLASY DZIEDZICZENIE

Programowanie Obiektowew języku C++ Zadania L9

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

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

Wykład 5 Okna MDI i SDI, dziedziczenie

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

Zaawansowane programowanie w języku C++ Programowanie obiektowe

tel Konsultacje www

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

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

C++ - [3-5] Pliki i strumienie w C++

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

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

Pliki wykład. Dorota Pylak

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

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

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

Dokumentacja do API Javy.

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

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

Pliki wykład. Dorota Pylak

obiekty funkcyjne - funktory

dr inż. Jarosław Forenc

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

PARADYGMATY PROGRAMOWANIA Wykład 2

Zajęcia nr 4 Programowanie obiektowe konstruktory. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Wykład :37 PP2_W9

Wstęp do Programowania 2

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

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

Wejście wyjście strumieniowe

PARADYGMATY PROGRAMOWANIA Wykład 3

Abstrakcyjny typ danych

Programowanie Obiektowew języku C++ Zadania L4

Programowanie Obiektowe i C++

C++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony

Programowanie obiektowe w C++ Wykład 12

Projektowanie klas c.d. Projektowanie klas przykład

Mechanizm dziedziczenia

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

Plik klasy. h deklaracje klas

Programowanie Obiektowew języku C++ Zadania L2

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

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

Programowanie obiektowe w języku

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

Wstęp do Programowania 2

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

Pliki wykład 2. Dorota Pylak

Podstawy Programowania Obiektowego

Programowanie i struktury danych

Programowanie i struktury danych

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

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

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Programowanie Obiektowe i C++

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

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

Wstęp do programowania

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

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

Programowanie Obiektowew języku C++ Zadania L8

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

Zaawansowane programowanie w języku C++ Biblioteka standardowa

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

Programowanie, część I

Pliki wykład 2. Dorota Pylak

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Programowanie w językach

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

Wprowadzenie do programowanie obiektowego w języku C++

Programowanie obiektowe i C++ dla matematyków

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM

Transkrypt:

Dziedziczenie 27.04.2016 & 04.05.2016 W slajdach są materiały zapożyczone z https://www.ii.uni.wroc.pl/~prz/2012lato/cpp/slajdy/cpp5.ppt

class A{ private: int x, y; public: void setvaluex(); void setvaluey(); };... int main(){ A obj; obj.x = 3; obj.setvaluey(3);... } Znajdź błąd

Koncepcja Abstrakcja Enkapsulacja Ochrona informacji Polimorfizm Dziedziczenie Realizacja w C++ Klasy Klasy public/protected/private Przeładowanie operatorów, wzorce, metody wirtualne Dziedziczenie klas

Dziedziczenie Dziedziczenie pozwala stworzyć nową klasę przy wykorzystaniu już istniejącej klasy. Dziedziczenie to modyfikacja typu polegająca na jego przystosowaniu do określonych warunków jest to więc rodzaj specjalizacji. Tekst zapożyczony z https://www.ii.uni.wroc.pl/~prz/2012lato/cpp/slajdy/cpp5.ppt

Dziedziczenie Nomenklatura: klasa bazowa (podstawowa albo nadklasa) to klasa, z której dziedziczą inne klasy; klasa pochodna (podklasa) to nowa klasa, która dziedziczy strukturę informacyjną i funkcjonalność z innej klasy. Rysunek schematyczny: klasa bazowa klasa pochodna

Przykład Klasa bazowa Macierz Klasa pochodna - MacierzKwadratowa

class Macierz { public: Macierz(int n, int m); int liczba_wierszy(); int liczba_kolumn(); void wypisz(); void ustaw_wartosc(int wiersz, int kolumna, double wartosc); double wartosc(int wiersz, int kolumna); void pomnoz_przez(double r); private: int w, k; vector< vector<double> > dane; };

class MacierzKwadratowa : public Macierz { public: MacierzKwadratowa(int n); }; double wyznacznik();

Zasada podstawienia Liskov Funkcje które używają wskaźników lub referencji do klas bazowych, muszą być w stanie używać również obiektów klas dziedziczących po klasach bazowych, bez dokładnej znajomości tych obiektów Kontrprzykład: void przetwarzajfigurę(figura& ifigura) { if(typeid(ifigura) == typeid(prostokąt)) przetwarzajprostokąt(static_cast<prostokąt&>(ifigura)); else if(typeid(ifigura) == typeid(okrąg)) przetwarzajokrąg(static_cast<okrąg&>(ifigura)); } else if(typeid(ifigura) == typeid(kwadrat)) przetwarzajkwadrat(static_cast<kwadrat&>(ifigura));

Dostęp do składników W klasie pochodnej nie ma dostępu do odziedziczonych składników prywatnych (czyli private). W klasie pochodnej jest dostęp do odziedziczonych składników nieprywatnych (czyli protected i public). Składniki chronione (czyli protected) są dostępne tylko w klasie bieżącej i w klasach pochodnych ale nie na zewnątrz.

Dostęp do składników Klasa pochodna też decyduje o zakresie widoczności odziedziczonych składników nieprywatnych poprzez sposób dziedziczenia (public, protected, private): przy dziedziczeniu publicznym odziedziczone składniki nieprywatne zachowują swój zakres widoczności; przy dziedziczeniu chronionym odziedziczone składniki nieprywatne stają się chronione; przy dziedziczeniu prywatnym odziedziczone składniki nieprywatne stają się prywatne. Domyślny sposób dziedziczenia to private.

Hierarchia klas Dziedziczenie może mieć wiele poziomów. Jedna klasa może być klasą bazową dla wielu innych klas. klasa A klasa B klasa D klasa C klasa E klasa F klasa G klasa D

Dziedziczenie wielokrotne (wielodziedziczenie) Wielodziedziczenie może prowadzić do wielu skomplikowanych sytuacji: w pojedynczym obiekcie pewna informacja może się wielokrotnie powtórzyć. A B C D A A C B D A

Dziedziczenie wirtualne Dziedziczenie wirtualne może rozwiązać część problemów z dziedziczeniem wielobazowym. Dziedziczenie wirtualne powoduje, że pewne informacje występujące wielokrotnie w obiekcie mogą stać się wspólne dla wielu części. Dziedziczenie wirtualne deklaruje się słowem virtual występującym na liście pochodzenia przed klasą bazową. Konstruktor wirtualnej klasy podstawowej jest wywoływany przed konstruktorami jej klas pochodnych.

Dziedziczenie wirtualne Przykład dziedziczenia wirtualnego: class pojazd {/* */}; class samochód: public virtual pojazd {/* */}; class łódź: public virtual pojazd {/* */}; class amfibia: public samochód, public łódź {/* */}; pojazd samochód amfibia łódź łódź samochód pojazd amfibia

Dwa przykłady ROOT i Qwt

http://letrungthang.blogspot.com

Hierarchia klas strumieniowych realizujących operacje we/wy basic_streambuf<> streambuf ifstream basic_istream<> istream istringstream virtual ios_base basic_ios<> ios basic_iostream<> iostream virtual basic_ostream<> ostream ofstream ostringstream fstream stringstream

#include <iostream> #include <fstream> #include <string> using namespace std; int main() { string a; cout << "Nacisnij Enter aby zakonczyc zapis.\n"; ofstream f("log.txt"); cin >> a; if (f.good()) { f << a; f.close(); } return 0; }

#include <iostream> #include <sstream> using namespace std; int main () { long x; string napis; sstringstream ss; cout << "Podaj dowolna liczbe calkowita: "; cin >> x; ss << x; napis = ss.str(); cout << "Dlugosc napisu wynosi " << napis.size() << " znakow." << endl; return 0; }

void wypisz_date(ostream &strumien, int dzien, int miesiac, int rok) { strumien << dzien << "." << miesiac << "." << rok << endl; }

#include <iostream> using namespace std; class Date { int mo, da, yr; public: Date(int m, int d, int y) { mo = m; da = d; yr = y; } friend ostream& operator<<(ostream& os, const Date& dt); }; ostream& operator<<(ostream& os, const Date& dt) { os << dt.da << '.' << dt.mo << '.' << dt.yr; return os; } int main() { Date dt(5, 6, 92); cout << dt; }

class Box { public: // konstruktor Box(double l=2.0, double b=2.0, double h=2.0) { cout <<"Constructor called." << endl; length = l; breadth = b; height = h; // każdy obiekt zwieksza licznik objectcount++; } double Volume() { return length * breadth * height; } private: double length, breadth, height; static int objectcount; }; // Initialize static member of class Box int Box::objectCount = 0;