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

Podobne dokumenty
Dziedziczenie jednobazowe, poliformizm

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

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

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

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

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

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

Język C++ Programowanie obiektowe

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

.NET Klasy, obiekty. ciąg dalszy

Programowanie obiektowe - 1.

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 2

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Języki i paradygmaty programowania

OBIEKTY PHP. G. Panuś

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Wykład 8: klasy cz. 4

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

Materiały do zajęć VII

Programowanie obiektowe

Dziedziczenie. Ogólna postać dziedziczenia klas:

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

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Enkapsulacja, dziedziczenie, polimorfizm

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

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

Mechanizm dziedziczenia

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

Podstawy Programowania Obiektowego

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

Wprowadzenie do programowanie obiektowego w języku C++

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

Kurs WWW. Paweł Rajba.

Język programowania. Andrzej Bobyk

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

TEMAT : KLASY DZIEDZICZENIE

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

Programowanie obiektowe

Kompozycja i dziedziczenie klas

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje w roku akademickim 2012/2013. Przedmioty kierunkowe

Programowanie obiektowe i zdarzeniowe

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

Definiowanie własnych klas

dr inż. Jarosław Forenc

Zaawansowane programowanie w C++ (PCP)

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

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2012/2013

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

Programowanie obiektowe

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

Programowanie obiektowe

Dziedziczenie. dr Jarosław Skaruz

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

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

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

Dziedziczenie jednobazowe, poliformizm, tablice wskaźników na obiekty

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

PHP 5 język obiektowy

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.

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Polimorfizm. dr Jarosław Skaruz

Wykład 5: Klasy cz. 3

Wstęp do programowania obiektowego. Wykład 1 Algorytmy i paradygmaty Podstawowe pojęcia PO

Programowanie Obiektowe i C++

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

C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm. C++ - polimorfizm POLIMORFIZM

Klasa dziedzicząca posiada wszystkie cechy klasy bazowej (plus swoje własne) dodawanie nowego kodu bez edycji (i ewentualnego wprowadzania

Multimedia JAVA. Historia

Podstawy programowania III

Zaawansowane programowanie w C++ (PCP)

Programowanie obiektowe w języku

Technologie i usługi internetowe cz. 2

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

Podstawy programowania. Wykład PASCAL. Wstęp do programowania obiektowego. dr Artur Bartoszewski - Podstawy programowania, sem.

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

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

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

Dokumentacja do API Javy.

Wykład 4: Klasy i Metody

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

Mechanizm dziedziczenia

Wykład 6: Dziedziczenie

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

Wykład 5 Okna MDI i SDI, dziedziczenie

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

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

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

Aplikacje w środowisku Java

Wstęp do programowania obiektowego. Wykład 2

Pola i metody statyczne. Klasy zawierające pola i metody statyczne

Programowanie obiektowe

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

Języki programowania imperatywnego

Programowanie obiektowe

KARTA PRZEDMIOTU. 1. Informacje ogólne. 2. Ogólna charakterystyka przedmiotu. Programowanie II C16

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

Transkrypt:

Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie obiektów 2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne 3. Funkcje operatorowe. Wskaźnik this 4. Dziedziczenie 5. Polimorfizm i funkcje wirtualne 6. Szablony 7. Strumienie 8. Tworzenie aplikacji w systemie Windows

Dziedziczenie Wprowadzenie (co to jest? po co? idea?) Klasa bazowa i pochodna Rodzaje dziedziczenia Definiowanie klasy pochodnej Właściwości dziedziczenia Dziedziczenie publiczne i prywatne Obiekt klasy pochodnej Przesłanianie identyfikatorów

Paradygmaty PO Celem programowania obiektowego (PO) jest ograniczenie problemu złożoności programowania poprzez hermetyzację danych oraz wiązanie obiektów w hierarchiczne struktury. Hermetyzacja danych Hierarchia klas (obiektów)

Idea dziedziczenia ObiektGraficzny kolor linii rodzaj linii grubość linii kolor wypełnienia NIEOKREŚLONY KSZTAŁT OKREŚLONY KSZTAŁT OKREŚLONA METODA RYSOWANIA OKREŚLONY KSZTAŁT NIEOKREŚLONA METODA RYSOWANIA Linia łamana P 1 P 2 P 3 P 4 P 5 P 1 Trójkąt P 2 P 3 KształtProstokątny P 1 P 2 P 1, P 2,..., P n P 1, P 2, P 3 P 1, P 2 OKREŚLONA METODA RYSOWANIA P 1 Linia Prostokąt P 1 P 1 Elipsa P 2 P 2 P 2 Hierarchia klas: od klas bardziej ogólnych do klas szczegółowych.

Dziedziczenie - definicja Dziedziczenie to mechanizm tworzenia nowej klasy w oparciu o klasę wcześniej zdefiniowaną. Nowa klasa (klasa pochodna) nie musi być definiowana od podstaw może korzystać z pól i metod klasy już zdefiniowanej (klasy bazowej). Klasa pochodna to rozszerzenie klasy bazowej. Ważna właściwość: do tworzenia klasy pochodnej nie jest potrzebny dostęp do kodu źródłowego klasy bazowej wystarczy interfejs i kod binarny klasy (przykład: wykorzystanie bibliotek MFC, VCL itp.).

Dziedziczenie jednobazowe Klasa bazowa Klasa pochodna Klasa bazowa Klasa bazowa Klasa pochodna 1 Klasa pochodna 2 Klasa pochodna 1 Klasa pochodna 2

Dziedziczenie wielobazowe Klasa bazowa 1 Klasa bazowa 2 Klasa pochodna Problem: składowe o tych samych nazwach w klasach bazowych. Rozwiązanie: odwołanie za pomocą nazwy kwalifikowanej <nazwa_klasy> :: <nazwa_skladowej> x A B x C A::x B::x

Definiowanie klasy pochodnej class <KlasaPochodna> : <SposobDziedzicz> <KlasaBazowa> public private protected PRZYKŁAD: class Lokalizacja // klasa bazowa < deklaracje i definicje > class Punkt : public Lokalizacja < deklaracje i definicje > // klasa pochodna

Właściwości dziedziczenia Co może być dziedziczone? funkcje składowe (metody) pola składowe Nie wszystkie! W zależności od kwalifikatora dostępu. Co nie jest dziedziczone? konstruktory destruktory funkcje zaprzyjaźnione (zaprzyjaźnienia) funkcja operatorowa operator = Pola statyczne są wspólne dla wszystkich obiektów wszystkich dziedziczących je klas (wspólne dla całej rodziny klas).

Prawa dostępu Kwalifikatory: public, protected, private Wszystkie składowe zdefiniowane w klasie są dostępne wewnątrz klasy. Składowe publiczne (public) są dostępne tam, gdzie dostępna jest klasa i są dziedziczone przez klasy pochodne. Składowe prywatne (private) są dostępne tylko w danej klasie. Składowe chronione (protected) są dostępne we wszystkich klasach pochodnych.

Sposoby dziedziczenia Dziedziczenie publiczne: public Składowe publiczne klasy bazowej są dostępne jako składowe publiczne w klasie pochodnej Składowe zabezpieczone klasy bazowej są dostępne jako składowe zabezpieczone w klasie pochodnej Składowe prywatne nie są dziedziczone Dziedziczenie prywatne: private Składowe publiczne i zabezpieczone są dostępne jako składowe prywatne w klasie pochodnej Składowe prywatne nie są dziedziczone Dziedziczenie publiczne rozszerzanie możliwości klasy bazowej. Dziedziczenie prywatne klasy bazowe to klasy robocze, wewnętrzne z punktu widzenia funkcjonalności, a klasy pochodne są finalne.

Warianty dziedziczenia Składowe widoczne na zewnątrz klasy class B : public A pubb, puba protected: prob, proa private: prib class A puba protected: proa private: pria class D : protected A pubd protected: prod, puba, proa private: prid class C : private A pubc protected: proc private: pric, puba, proa

Warianty dziedziczenia Składowe widoczne na zewnątrz klasy class B : public A pubb, puba protected: prob, proa private: prib class A puba protected: proa private: pria class C : private A pubc protected: proc private: pric, puba, proa

Obiekt klasy pochodnej Utworzenie obiektu klasy pochodnej jest poprzedzone utworzeniem obiektu klasy bazowej. Konstruktor klasy pochodnej najpierw wywołuje konstruktor klasy bazowej, a następnie realizuje swoje zadania. Jeżeli klasa bazowa ma kilka konstruktorów, należy wskazać przy użyciu listy inicjalizującej, który z konstruktorów ma zostać wywołany. Kiedy brak tej informacji, zawsze wywoływany jest konstruktor bezparametrowy. Przykład: ABCD.cpp

class A A() } A(int x) } class B: public A B() } B(int b) : A(b) } B(float x) } Przykład: ABCD.cpp Konstruktory: wywoływane są zgodnie z hierarchią klas. Destruktory: wywoływane są w odwrotnej kolejności. Lista inicjalizująca: wywołanie wybranego konstruktora z klasy bazowej A HIERARCHIA KLAS A B public private public C D class C: public B class D: private B C() } D() } C B A D

Przesłanianie identyfikatorów Jeżeli w klasie pochodnej zdefiniowana jest składowa o takiej samej nazwie jak w klasie bazowej, to następuje przesłonięcie (nie przedefiniowanie) odziedziczonej składowej. W przypadku funkcji, przesłonięcie ma miejsce nawet wtedy, gdy funkcje mają różne argumenty. Przesłonięta składowa jest nadal dostępna w klasie pochodnej przez nazwę kwalifikowaną. Zasady poszukiwania składowych: 1. Nazwa składowej poszukiwana jest w klasie bieżącej (określonej przez typ obiektu). 2. Jeżeli nie zostanie znaleziona, nazwa składowej jest poszukiwana w kolejnych klasach bazowych (kolejno, idąc w górę hierarchii klas).