Mechanizm dziedziczenia

Podobne dokumenty
Mechanizm dziedziczenia

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

Dziedziczenie i interfejsy

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.

dr inż. Jarosław Forenc

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

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

Wprowadzenie do programowanie obiektowego w języku C++

Wprowadzenie do programowanie obiektowego w języku C++

TEMAT : KLASY POLIMORFIZM

Programowanie obiektowe w języku

Dziedziczenie. Ogólna postać dziedziczenia klas:

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

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

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

TEMAT : KLASY DZIEDZICZENIE

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

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

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.

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

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

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

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

Dziedziczenie. dr Jarosław Skaruz

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

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

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

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

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

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

1 Dziedziczenie. 1.1 Koncepcja dziedziczenia. Ćwiczenie 3

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

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

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

Zadania z podstaw programowania obiektowego

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Technologie i usługi internetowe cz. 2

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

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

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

Programowanie komputerowe. Zajęcia 7

Polimorfizm. dr Jarosław Skaruz

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

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

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

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

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

Plik klasy. h deklaracje klas

Programowanie obiektowe

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

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

Wykład 5 Okna MDI i SDI, dziedziczenie

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

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

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

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

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

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

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

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

Dokumentacja do API Javy.

Programowanie obiektowe

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

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Wstęp do Programowania 2

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

Do czego służą klasy?

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM

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

void Pobierz(Student &a); void Wypisz(Student a); void Ustaw_zaliczenia(Student t[],int r); void Wypisz_najlepszych(Student t[],int r, float prog);

Technologie cyfrowe semestr letni 2018/2019

Dziedziczenie jednobazowe, poliformizm

Technologie cyfrowe semestr letni 2018/2019

Listy powiązane zorientowane obiektowo

Aplikacje w środowisku Java

Podstawy Programowania Obiektowego

Dziedziczenie. Zadanie 1

Programowanie obiektowe w C++ Wykład 12

PARADYGMATY PROGRAMOWANIA Wykład 2

Programowanie obiektowe

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

Programowanie Obiektowe i C++

Materiały do zajęć VII

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

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

Polimorfizm w pigułce

Aplikacje w środowisku Java

Programowanie obiektowe

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

Język C++ Programowanie obiektowe

#include <iostream> using namespace std; void ela(int); int main( ); { Funkcja 3. return 0; }

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Wstęp do programowania

1 Definiowanie prostych klas

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

Programowanie obiektowe W3

Część 4 życie programu

Transkrypt:

Mechanizm dziedziczenia

Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia w C++ Pola statyczne i redefinicja metod Hierarchia wywoływania konstruktorów Dziedziczenie wielobazowe Dalsza część wywiadu z Runnerem

Destruktor specjalna funkcja, która wykonuje czynności dla obiektu, który ma zostać usunięty. W danej klasie może być zdefiniowany tylko jeden destruktor.

Wyróżnia się dwa sposoby ponownego wykorzystania klas: Kompozycję oznacza, że obiekt jest zawarty w innym obiekcie i jest reprezentowana przez relację całość-część. Przykładowo lampa zawiera żarówkę (i nie bardzo sobie można wyobrazić lampę bez żarówki) Dziedziczenie oznacza przejmowanie własności innego obiektu i poddanie ich wyspecjalizowaniu. Jest reprezentowane przez relację generalizacji-specjalizacji np. Paprotka jest specjalizacją Rośliny. Technika dziedziczenia umożliwia tworzenie nowych klas na bazie klas już istniejących. Klasa, która dziedziczy po innej klasie, przejmuje jej metody i pola, oraz najczęściej dodaje własne by dostosować ją do konkretnego zadania. Wyjątkiem są konstruktory i destruktory nie są dziedziczone. Klasę po której się dziedziczy określa się nadklasą, klasą bazową lub klasą macierzystą. Nowo utworzona klasa nazywa się podklasą, klasą pochodną lub klasą potomną.

Szescian.h Tutaj koniecznie lista inicjalizacyjna Szescian.cpp

Załóżmy, że programista pomylił się przy redefinicji metody obliczpole(): double Szescian::obliczPole() { return 6 * obliczpole(); } Błąd! Nie jest określone, że ma zostać wywołana funkcja obliczpole() z klasy Kwadrat. Co więc się stanie? Zostanie wywołana rekurencyjnie funkcja obliczpole() z klasy Szescian.

Zasady rządzące sekcją protected: Składowe zadeklarowane jako protected są dostępne dla obiektów wszystkich klas pochodnych (tak jak składowe public). Składowe zadeklarowane jako protected są niedostępne dla obiektów innych, niezaprzyjaźnionych klas (tak jak składowe private). Specyfikator protected działa jak private, z tym wyjątkiem, że obiekty klas pochodnych otrzymują dostęp do składowych protected klasy bazowej. Pola i funkcje zadeklarowane w sekcji protected nazywane są chronionymi. class Kwadrat {... protected: double dlboku; }; double Szescian::obliczObjetosc() { return Kwadrat::obliczPole() * dlboku; }

Dla obiektu stolik aktywowany jest konstruktor klasy OkraglyStol. Ponieważ klasa ta dziedziczy po dwóch klasach (Stol, Okrag), na liście inicjalizacyjnej tego konstruktora umieszczone są odwołania do dwóch konstruktorów. W trakcie przetwarzania listy inicjalizacyjnej następuje aktywowanie obu tych konstruktorów. Kolejność aktywowania konstruktorów dla obiektu klasy pochodnej wynika z kolejności występowania nazw klas bazowych w deklaracji tej klasy. Nie jest istotna kolejność ich umieszczenia na liście inicjalizacyjnej konstruktora klasy pochodnej.

Proszę pobrać projekt pod adresem: http://www.tomaszx.pl/materialy/jpohierarchiaklas.zip oraz zapoznać się z jego zawartością. Następnie proszę odpowiedzieć na następujące pytania: Jaka jest kolejność aktywacji konstruktorów i destruktorów, gdy obiekt tworzony jest jako Absolwent a;? Jaka jest kolejność aktywacji konstruktorów i destruktorów, gdy obiekt tworzony jest jako Absolwent a( 10 );? Proszę usunąć aktywację konstruktorów klas bazowych z listy inicjalizacyjnej konstruktorów klas pochodnych Absolwent i Student oraz sprawdzić jak sytuacji wygląda po rekompilacji programu.

1. Bazując na klasach opisu figur płaskich stworzonych wcześniej, zdefiniować ich klasy pochodne, reprezentujące bryły: sześcian, prostopadłościan, kula, graniastosłup o podstawie trapezu. W klasach pochodnych należy dodać wszelkie informacje konieczne dla obliczenia pól tych brył oraz należy przedefiniować funkcje składowe obliczania pola (funkcje obliczpole każdej z klas reprezentujących figurę płaską), tak by wyznaczały właściwe pola brył.

2. Poniżej podana została klasa Lista, która służy do przechowywania listy liczb całkowitych, uzupełnij metody tej klasy. class Lista { private: int liczby[100]; // tablicy na przechowywane liczby int pojemnosc; // liczba elementów, które można int rozmiar; public: Lista(); // pomieścić na liście // liczba elementów aktualnie // przechowywana na liście // dodaje nową liczbę do listy void dodaj(int liczba); // zwraca element listy znajdujący sie na podanym indeksie int dajelement(int indeks); // wyświetla aktualny rozmiar listy, tj. liczbę elementów int wezrozmiar(); };

2. c.d. Przykład użycia klasy lista: #include <iostream> #include <cstdlib> #include <ctime> #include "Lista.h" using namespace std; int main() { Lista l; srand(time(null)); for(int i = 0; i < 20; i++) l.dodaj( rand() % 100 ); cout << "Zawartosc listy: "; for(int i = 0; i < l.wezrozmiar(); i++) cout << l.dajelement(i) << " "; cout << endl; } return 0;

3. Zdefiniuj klasę Przedmiot reprezentującą przedmiot ćwiczeniowy studenta. Klasa powinna zawierać: pola prywatne: double oceny[]; // oceny studenta int nr_indeksu; // numer indeksu studenta int liczba_ocen; // liczba wprowadzonych ocen int limit_ocen; // maksymalna liczba ocen publiczny konstruktor z dwoma parametrami: int nr_indeksu, int limit_ocen metody publiczne: double obliczsrednia(); // oblicza średnią arytmetyczną ocen bool zaliczenie(); // określa, czy student otrzyma zaliczenie void dodajocene(double ocena); // dodaje nową ocenę void zmienocene(double ocena, int id); // zmienia ocenę void pisz(); // wypisuje na ekranie informację

3. Dodatkowe informacje: Funkcja obliczsrednia oblicza i zwraca średnią arytmetyczną wpisanych już ocen Funkcja zaliczenie ustala, czy student otrzyma zaliczenie (średnia wszystkich uzupełnionych ocen większa lub równa 3.0). Jeśli otrzyma, to zwraca true, w przeciwnym razie false Funkcja dodajocene dodaje nową ocenę (jeśli jest to możliwe nie przekroczy limitu) Funkcja zmienocene zmienia ocenę na podanej pozycji (id liczonej od 0), ale tylko jeśli taka ocena istnieje; Funkcja pisz wyświetla na ekran studenta, wszystkie uzupełnione oceny i informację, czy aktualnie dostałby zaliczenie (tak lub nie).