1 Dziedziczenie. 1.1 Koncepcja dziedziczenia. Ćwiczenie 3
|
|
- Wacław Karczewski
- 9 lat temu
- Przeglądów:
Transkrypt
1 Ćwiczenie 3 1 Dziedziczenie Ćwiczenie to poświęcone jest poznaniu podstawowych zagadnień związanych dziedziczeniem procesem budowania nowych klas, w oparciu o klasy istniejące. Obejmuje m.in. ćwiczenia pozwalające opanować definiowanie klas pochodnych, definiowanie konstruktorów tych klas, redefinicję metod oraz rozbudowę listy pól. Materiał teoretyczny, niezbędny dla zrozumienia prezentowanych przykładów, zawierają materiały wykładowe dostępne online, w postaci dokumentu pdf, pod adresem: Koncepcja dziedziczenia Koncepcja dziedziczenia (ang. inheritance) pozwala na budowanie nowych klas z wykorzystaniem klas już istniejących. Te nowe klasy, nazywane są klasami pochodnymi, zaś klasy stanowiące podstawę dziedziczenia, nazywamy klasami bazowymi. Dziedziczenie jest zatem procesem tworzenia klas potomnych (ang. derivation). Dziedziczenie pozwala urzeczywistnić pomysł powtórnego wykorzystania kodu. Koncepcja ta w oryginale nosi angielską nazwę code reusability. Dzięki temu podejściu nie trzeba tworzyć klas od nowa, o ile istnieją takie, które można rozszerzyć lub zaadaptować do stojących przed programistą zadań. Prześledźmy to na następującym przykładzie. Załóżmy, że naszym zadaniem jest napisanie programu obliczającego pole i objętość sześcianu (ang. cube). Sześcian jest oparty na kwadracie, o jego polu i objętości decyduje długość boku jednej ze ścian. A każda z nich jest kwadratem. Można zatem założyć, że sześcian to specyficzny kwadrat wyciągnięty w przestrzeni, obdarzony trzecim wymiarem. Ilustruje to Rysunek 1. W trakcie opracowania programów z Ćwiczenia 1-szego, należało opracować klasę Square (kwadrat). Klasa ta definiowała kwadrat, jako figurę geometryczną określoną długością boku pamiętaną w polu o nazwie side (bok). Klasa ta definiowała również funkcję składową area, obliczającą pole kwadratu. Nasuwa się pytanie czy można wykorzystać istniejący już kod klasy Square do utworzenia klasy reprezentującej sześcian? Niech ta klasa nazywa się Cube. Rzeczywiście, klasa Square może posłużyć jako klasa bazowa do opracowania klasy
2 2 Kwadrat Sześcian bok Cube. Niestety, funkcja area klasy Square oblicza pole kwadratu a nie sześcianu trzeba będzie coś z tym zrobić. Klasa Square nie posiada również funkcji obliczającej objętość (ang. volume). Trzeba ją będzie zdefiniować. Rysunek 1 Od kwadratu do sześcianu koncepcja dziedziczenia Zacznijmy jednak od klasy Square. Jej definicja jest następująca: class Square public : Square(); Square( double side ); void setside( double side ); double getside(); double area(); private: double side; ; bok A definicje funkcji składowych mają następującą postać: Square::Square() : side( 0 ) Square::Square( double side ) : side( side ) void Square::setSide( double side ) Square::side = side; double Square::getSide() return side; double Square::area()
3 return side * side; Koncepcję dziedziczenia ilustruje Rysunek 2. Po lewej diagram wg. zunifikowanej notacji obiektowej (język UML). Umieszczono na nim inne od konstruktorów składowe klasy Square. Składowe poprzedzone znakiem (+) to składowe publiczne, znakiem ( ) to składowe prywatne. Strzałka oznacza dziedziczenie, grot wskazuje klasę bazową. Prawa część rysunku symbolicznie ilustruje to, że obiekt klasy Cube będzie zawierał w sobie wszystko to, co obiekt klasy Square, oraz dodatkowe dwie funkcje składowe. Square +void setside( double side ) +double getside() +double area() -bok: double Cube +double volume() +double area() +double volume() +double area() Cube Square +void setside( double side ) +double getside() +double area() -bok: double Rysunek 2 Diagram UML dla dziedziczenia Spróbujmy zbudować klasę Cube z wykorzystaniem koncepcji dziedziczenia. Klasę pochodną rozpoczynamy od następującej definicji: class Cube : public Square ; Specyfikacja umieszczona po znaku dwukropka oznacza, że klasa Cube powstaje z klasy Square, dziedzicząc wszystkie jej składowe pola i funkcje składowe. Słowo kluczowe public oznacza dziedziczenie w trybie publicznym, niech to oznacza w tym momencie, że ustalona w klasie Square widoczność składowych będzie taka sama w klasie Cube. W tym momencie można już od biedy korzystać z klasy Cube oczywiście nie da się zrobić z obiektem tej klasy niczego więcej niż z obiektem klasy Square. Rozszerzmy klasę Cube o deklarację funkcji obliczania objętości volume(): class Cube : public Square public: double volume(); ; oraz jej definicję: double Cube::volume()
4 4 return side * side * side; Niestety, próba kompilacji tak zdefiniowanej funkcji się nie powiedzie. Pole side jest bowiem prywatną własnością obiektów klasy Square i nie jest dostępne w funkcjach klasy pochodnej. Należy skorzystać z akcesora funkcji getside(): double Cube::volume() return getside() * getside() * getside(); Gdyby przyjrzeć się jednak wzorowi na objętość, można stwierdzić, że jest to iloczyn pola powierzchni podstawy i wysokości. Pole powierzchni podstawy to nic innego jak pole kwadratu. A klasa Square posiada przecież funkcję służącą do obliczania tegoż pola. Zatem funkcję volume() można przepisać jeszcze raz, w następujący sposób: double Cube::volume() return area() * getside(); Nową funkcję obliczającą objętość sześcianu można wykorzystać następująco: Cube c; c.setside( 10 ); cout << "Objetosc szescianu o boku: " << c.getside(); cout << " wynosi: " << c.volume() << endl; Podsumowanie Podsumowując, możemy stwierdzić, że klasa Cube dziedziczy wszystkie właściwości klasy Square. Zatem posiada w sobie wszystkie pola, takie jak klasa Square, i wszystkie zdefiniowane w tej klasie funkcje składowe. Wykorzystując dziedziczenie, udało się rozszerzyć funkcjonalność klasy bazowej o jedną, nową funkcję volume(). Wszystko to stało się bez pisania dodatkowego kodu, dziedziczenie pozwoliło utworzyć nową, działająca klasę poprzez napisanie 8-miu nowych linii kodu! 1.2 Redefiniujemy funkcję area() Zauważmy, że funkcja area() obliczająca w klasie Square pole kwadratu została odziedziczona przez klasę Cube. Programista może zatem ją wykorzystać:
5 Cube c; c.setside( 10 ); cout << "Pole szescianu o boku: " << c.getside(); cout << " wynosi: " << c.area() << endl;; Niestety, wynik będzie niepoprawny! Nie powinno to być zaskoczeniem odziedziczona funkcja składowa area() liczy dokładnie pole kwadratu i w żaden cudowny sposób nie zacznie samodzielnie liczyć pola sześcianu! Aby temu zaradzić należy w klasie Cube zadeklarować własną, specyficzną dla tej klasy wersję funkcji area(). Wersja ta, w obrębie tej klasy, przesłaniać będzie funkcję area() odziedziczoną po klasie Square. Inaczej mówiąc, deklarując klasę Cube dokonujemy redefinicji funkcji składowej area(). double Cube::area() return 6 * ( getside() * getside() ); Spróbujmy napisać program testujący dotychczasowe wyniki naszej pracy: Cube c; c.setside( 10 ); cout << "Szescian o boku: " << c.getside() << endl; cout << " Objetosc: " << c.volume() << endl; cout << "Powierzchnia: " << c.area() << endl; Zobaczmy wyniki jego działania prezentuje to Rysunek 3: Rysunek 3 Objętość i powierzchnia coś tu nie gra.... Powierzchnia się zgadza. Objętość nie. Dlaczego? Przypomnijmy sobie, jak zdefiniowana została funkcja składowa obliczająca objętość: double Cube::volume() return area() * getside(); Pole razy bok, niby dobrze, ale przecież to chodziło o pole kwadratu stanowiącego podstawę sześcianu! A my dokonaliśmy redefinicji funkcji area(), i ona teraz oblicza pole powierzchni nie kwadratu a sześcianu a to jest sześciokrotnie większe popatrzmy, na umieszczoną wyżej, definicję funkcji składowej Cube::area().
6 Co z tym zrobić? Funkcji volume() działa źle. Wywołuje funkcję obliczania pola sześcianu a nie kwadratu, stąd błędna wartość. Jak temu zaradzić? Odpowiedź tkwi w poprzednim zdaniu. Przeczytajmy je jeszcze raz. I co? Ano to, że funkcja volume() będzie działać dobrze, jeżeli zamiast funkcji area() klasy Cube, wywoła funkcję area() klasy Square. Ale jak to zrobić? Zobaczmy, czym różnią się definicje obu tych funkcji: double Square::area() return side * side; oraz double Cube::area() return 6 * ( getside() * getside() ); Oczywiście różnią się ich ciała. Ale przyjrzyjmy się nagłówkom. Nazwy niby takie same, ale przed nazwami, no właśnie, przed nazwami są kwalifikatory nazw w postaci nazwy klasy i operatora zakresu (::). Takich nazw kwalifikowanych można używać również przy wywołaniach funkcji, zatem definicję funkcji składowej volume() można teraz przepisać w następujący sposób: double Cube::volume() return Square::area() * getside(); Cos dziwnego? W żadnym wypadku. Przecież objętość sześcianu to pole powierzchni podstawy, będącej kwadratem, przemnożone przez długość boku. I to właśnie napisaliśmy powyżej. Zobaczmy wyniki działania poprawionego programu przedstawia je Rysunek 4. Rysunek 4 Poprawiona funkcja volume() wyniki działania programu No, jest wyraźnie lepiej. Dokonajmy teraz kolejnych remanentów. Definicja funkcji area() klasy Cube wygląda nieco siermiężnie. Powierzchnia sześcianu to sześciokrotność pola powierzchni jednego boku będącego, jak wiemy, kwadratem. Można zatem przepisać tą funkcję następująco: double Cube::area() return 6 * Square::area();
7 W tej wersji funkcji volume() czai się jednak pułapka. Załóżmy, że programista piszący tą funkcję pomylił się i napisał ją następująco: double Cube::area() return 6 * area(); Cóż takiego napisał? Ano napisał, że powierzchnia sześcianu to sześciokrotność powierzchni sześcianu! Brak nazwy kwalifikowanej Square:: a właśnie na jej zapomnieniu polegał błąd programisty spowoduje, że funkcja area() będzie wywoływała samą siebie! Mamy tutaj swoistą, niezamierzoną rekurencję, bez warunku jej zakończenia. Jak się zachowa program w takiej wersji? Proponuję eksperyment uruchomcie program z tak zdefiniowaną funkcją area(), skompilowany Waszym ulubionym kompilatorem, w Waszym ulubionym środowisku systemowym. Proponuję jednak przed uruchomieniem na wszelki wypadek zapisać wszystkie otwarte dokumentu. Podsumowanie Redefiniowanie funkcji składowych w klasach pochodnych pozwala na modyfikowanie ich działania tak, by było ono zgodne z wymaganiami stawianymi nowej klasie. Często jednak przykryta funkcja odziedziczona po klasie bazowej jest użyteczna. Aby się nią posłużyć, wystarczy jej wywołanie poprzedzić nazwą kwalifikowaną, zawierającą operator zakresu (::) poprzedzony nazwą klasy. Stosowanie nazw kwalifikowanych jest dobrą praktyką. Świadczy o tym najlepiej analizowany wyżej przykład. Zapobiegliwe stosowanie takich nazw, nawet, jeżeli pozornie nie wydaje się to konieczne, pozwala w przyszłości uniknąć wielu, dokuczliwych i trudnych w zlokalizowaniu błędów. 1.3 Konstruktory klasy pochodnej Klasa pochodna dziedziczy wszystkie składowe każdej klasy podstawowej, z wyjątkiem konstruktorów, destruktorów i operatorów przypisania. Warto sobie to zdanie zapamiętać, choć przynajmniej teoretycznie nie znamy jeszcze destruktorów i operatorów przypisania. Dla znamy już konstruktory. Konstruktory nie są dziedziczone. Przykładowo, nie powiedzie się próba skompilowania przedstawionego niżej kodu: Cube c( 10 ); cout << "Szescian o boku: " << c.getside() << endl; cout << " Objetosc: " << c.volume() << endl; cout << " Powierzchnia: " << c.area() << endl; W klasie Square zdefiniowano konstruktor ogólny:
8 Square::Square( double side ) : side( side ) Nie zostanie on jednak aktywowany automatycznie dla obiektu klasy Cube. W klasie pochodnej programista powinien zdefiniować konstruktory na nowo. Istnieje pewne rozluźnienie tej zasady, dotyczące konstruktorów domyślnych (bezparametrowych). Rozluźnienie to jest jednak mocno dyskusyjne, sam twórca języka Brajne Stroustrup namawia do definiowania również konstruktorów domyślnych klas pochodnych. Zapamiętajmy zatem: przy tworzeniu klasy pochodnej, programista zdefiniować powinien wszystkie niezbędne dla niej konstruktory. Aktywowanie konstruktora klasy bazowej Przy budowaniu klas pochodnych kierujemy się następującą zasadą: klasie pochodnej definiujemy metody do obsługi nowych pól, obsługę pól odziedziczonych realizujemy z wykorzystaniem metod odziedziczonych. Mimo, że konstruktory klasy pochodnej nie są jawnie dziedziczone, programista ma do nich dostęp. Może zatem aktywować je, i przy ich użyciu inicjować odziedziczone pola klasy bazowej. Definicja domyślnego konstruktora klasy Cube, inicjującego pole side z wykorzystaniem konstruktora klasy Square ma następującą postać: Cube::Cube() : Square() Na liście inicjalizacyjnej konstruktora klasy Cube umieszczono aktywowanie konstruktora domyślnego klasy Square. Co on robi? Ano przypisuje polu side domyślną wartość równą zero zobacz definicja konstruktora domyślnego klasy Square. Dlaczego aktywowanie konstruktora klasy bazowej odbywa się poprze umieszczenie go na liście inicjalizacyjnej a nie poprze jego jawne wywołanie w ciele konstruktora klasy Cube? W języku C++ zwykle nie wywołuje się jawnie konstruktorów, stąd mówimy raczej o aktywowaniu konstruktora na liście inicjalizacyjnej a nie jego wywołaniu. Lista inicjalizacyjna jest legalnym miejscem aktywowania konstruktora klasy bazowej. Definicja konstruktora ogólnego klasy Cube może być następująca: Cube::Cube( double side ) : Square( side ) Dlaczego w konstruktorach klasy Cube posługujemy się konstruktorami klasy bazowej a nie inicjujemy pola side własnoręcznie, np. w następujący sposób:
9 Cube::Cube() setside( 0 ); Cube::Cube( double side ) setside( side ); Owszem, można tak ale jakież to nieeleganckie! Oprócz tego, że nieeleganckie to rozrzutne i niezgodne z ideą programowania obiektowego. Przypomnijmy skoro konstruktor domyślny klasy Square jest po to, by zainicjować obiekt wartością domyślną pole side, to użyjmy go do zainicjowania tej właśnie części obiektu klasy Cube, która została odziedziczona z klasy Square. 1.4 Zadanie do wykonania W ramach ćwiczeń należy napisać obiektową wersję programu, pozwalającego na obliczanie pola powierzchni i objętości brył takich jak: sześcian, prostopadłościan, kula, graniastosłup o podstawie trójkąta. Każda z brył ma być opisana w postaci klasy, analogicznie do tego w jaki sposób zdefiniowano klasę Cube. I tak, kula dziedziczy właściwości po klasie opisu koła, prostopadłościan po prostokącie, ostrosłupy odpowiednio po trójkącie i trapezie. Każda z brył ma mieć zdefiniowaną funkcję obliczania objętości oraz zdefiniowaną ponownie funkcję obliczania pola powierzchni. W przypadku prostopadłościanu i graniastosłupa w klasie opisu danej bryły pojawić się musi nowe pole. W przypadku prostopadłościanu to długość krawędzi pionowej a w przypadku graniastosłupa to wysokość. Należy niezbędne pola zdefiniować w klasie pochodnej. Wszystkie niezbędne informacje na temat definiowania i inicjalizowania pól w klasie pochodnej zawierają materiały wykładowe, str Program ma działać analogicznie do programu obliczania pól figur płaskich z ćwiczenia 1. Ma być sterowany prostym menu tekstowy, pozwalającym na wybranie konkretnej bryły. Po jej wybraniu program mam wczytać parametry niezbędne do obliczenia pola powierzchni i objętości, co ma się odbyć obiektowo, w sposób analogiczny do opisanej klasy Cube.
10 Koncepcję utworzenia klasy opisu prostopadłościanu, w oparciu o klasę opisującą prostokąt ilustruje Rysunek 5. Klasa opisu prostopadłościanu posiadać będzie dodatkowe pole, przechowujące trzeci wymiar bryły. b b c a a Prostokąt Prostopadłościan Rysunek 5 Od prostokąta do prostopadłościanu 1.5 Co po tym ćwiczeniu należy umieć? Zakładam, że po tym ćwiczeniu każdy potrafi odpowiedzieć na pytanie i zastosować te wiadomości w praktyce: 1. Co to jest dziedziczenie? 2. Co to jest klasa bazowa a co klasa pochodna? 3. W jaki sposób dokonać rozszerzenia klasy pochodnej nowe pola i funkcje składowe? 4. W jaki sposób dokonuje się redefinicji funkcji składowej w klasie pochodnej i w jaki sposób odwołuje się do przesłoniętej funkcji składowej? 5. W jaki sposób definiuje się konstruktory klasy pochodnej, jak wygląda aktywowanie konstruktorów klas bazowych?
1 Definiowanie prostych klas
Ćwiczenie 1 1 Definiowanie prostych klas Ćwiczenie to poświęcone jest poznaniu podstawowych zagadnień związanych z definiowaniem prostych klas. Obejmuje m.in. ćwiczenia pozwalające opanować definiowanie
Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;
Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze
Mechanizm dziedziczenia
Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia
TEMAT : KLASY DZIEDZICZENIE
TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą
Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.
Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody
Mechanizm dziedziczenia
Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia
Wprowadzenie do programowanie obiektowego w języku C++
Wprowadzenie do programowanie obiektowego w języku C++ Część czwarta Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura
Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.
Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class
Wykład 5: Klasy cz. 3
Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu
Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.
Dziedziczenie Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasy Student oraz Pracownik: class Student class Pracownik
Programowanie strukturalne i obiektowe. Funkcje
Funkcje Często w programach spotykamy się z sytuacją, kiedy chcemy wykonać określoną czynność kilka razy np. dodać dwie liczby w trzech miejscach w programie. Oczywiście moglibyśmy to zrobić pisząc trzy
C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.
C++ - DZIEDZICZENIE Do najważniejszych cech języka C++ należy możliwość wielokrotnego wykorzystywania kodu Prymitywnym, ale skutecznym sposobem jest kompozycja: deklarowanie obiektów wewnątrz innych klas,
Wykład 8: klasy cz. 4
Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD
Programowanie obiektowe
Programowanie obiektowe Laboratorium 3 i 4 - przypomnienie wiadomości o OOP na przykładzie Javy mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 8 marca 2017 1 / 20 mgr inż. Krzysztof Szwarc
Języki i techniki programowania Ćwiczenia 3 Dziedziczenie
Języki i techniki programowania Ćwiczenia 3 Dziedziczenie Klasa abstrakcyjna Autor: Marcin Orchel Klasa abstrakcyjna to taka, że nie możemy tworzyć obiektów tej klasy, możemy jednak dziedziczyć po tej
Programowanie obiektowe, wykład nr 6. Klasy i obiekty
Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto
Wprowadzenie do programowanie obiektowego w języku C++
Wprowadzenie do programowanie obiektowego w języku C++ Część druga Obiekty i klasy Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści
Dziedziczenie. Zadanie 1
Dziedziczenie Zadanie 1 Napisz klasę KolorowyPunkt, która dziedziczy po klasie Punkt a dodatkowo przechowuje informacje o kolorze. Uzupełnij ją o metody umożliwiające pobieranie i ustawianie koloru. Pamiętaj
Wykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
Rozdział 4 KLASY, OBIEKTY, METODY
Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej
Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego
Aplikacje w środowisku Java
Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - dziedziczenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 W ramach poprzedniego laboratorium
Zaawansowane programowanie w języku C++ Programowanie obiektowe
Zaawansowane programowanie w języku C++ Programowanie obiektowe Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka
Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki
Informatyka I Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2017 Dziedziczenie klas
Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np
Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami
W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :
Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;
class Student Deklaracja klasy Osoba: Deklaracja klasy Student:
Osoba Student Będziemy mieli 2 klasy: Osoba, dla której zapamiętamy dane takie jak: imie, nazwisko i wiek Oraz klasę Student, w której będziemy też dodatkowo pamiętać kierunek studiów. Deklaracja klasy
Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.
Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.
Informatyka II Laboratorium 3 : Programowania obiektowe C++ - dziedziczenie
Materiały: Informatyka II Laboratorium : Programowania obiektowe C++ - dziedziczenie Książka: Symfonia C++, Jerzy Grębosz. Wykład: www.materialy.prz-rzeszow.pl, Informatyka II, dr Wojciech Rząsa. Zasoby
Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska
Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,
2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne
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
Szablony funkcji i szablony klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument
Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26
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
Programowanie obiektowe
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.
Programowanie obiektowe w języku C++
Programowanie obiektowe w języku C++ Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Klasy i obiekty pierwsze kroki Problem Przewidywane jest napisanie obiektowej wersji programu, realizującego
2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy
2.4 Dziedziczenie Poprzednie dwa rozdziały które dotyczyły zagadnienia automatów komórkowych na przykładach programów w C++. Mogłyby one sugerować że niekoniecznie trzeba programować obiektowo aby napisać
Dziedziczenie. Ogólna postać dziedziczenia klas:
Dziedziczenie Ogólna postać dziedziczenia klas: class nazwa_clasy_pochodnej : specyfikator_dostępu nazwa_clasy_bazowej specyfikator_dostępu : public private protected Specyfikator dostępu definiuje, w
Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).
Wprowadzenie w dziedziczenie Klasa D dziedziczy klasę B: B klasa bazowa D klasa pochodna Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class). Najpierw jest tworzona klasa bazowa,
Dziedziczenie jednobazowe, poliformizm
Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie jednobazowe 2. Polimorfizm część pierwsza 3. Polimorfizm część druga Zofia Kruczkiewicz, ETE8305_6 1 Dziedziczenie jednobazowe, poliformizm 1. Dziedziczenie
znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.
Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo
Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.
Część XVII C++ Funkcje Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład. 2 3 Tworzymy deklarację i definicję funkcji o nazwie pobierzln() Funkcja
Programowanie obiektowe
Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;
Polimorfizm. dr Jarosław Skaruz
Polimorfizm dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com O czym będzie? finalne składowe klasy abstrakcyjne interfejsy polimorfizm Finalne składowe Domyślnie wszystkie pola i metody
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji
Projektowanie obiektowe. Roman Simiński Polimorfizm
Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Polimorfizm Koncepcja polimorfizmu Słowo polimorfizm pochodzi od dwóch greckich słów: poly czyli wiele, morphos czyli
C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów
Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów
> C++ dziedziczenie. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki
> C++ dziedziczenie Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 1432108800 > Dziedziczenie Dziedziczenie C++ dziedziczenie 2 / 13 > Dziedziczenie Dziedziczenie * to
Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this
Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE
10. Programowanie obiektowe w PHP5
Ogólnie definicja klasy wygląda jak w C++. Oczywiście elementy składowe klasy są zmiennymi PHP, stąd nieśmiertelne $. Warto zauważyć, że mogą one mieć wartość HHH mgr inż. Grzegorz Kraszewski TECHNOLOGIE
WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy
WSNHiD, Programowanie 2 Lab. 2 Język Java struktura programu, dziedziczenie, abstrakcja, polimorfizm, interfejsy Pojęcie klasy Program napisany w języku Java składa się ze zbioru klas. Każda klasa zawiera
Programowanie komputerowe. Zajęcia 7
Programowanie komputerowe Zajęcia 7 Klasy Klasy to typy danych, które pozwalają na zgromadzenie w jednej zmiennej (obiekcie) zarówno danych jak i operacji związanych z tymi danymi. Obiekt danej klasy może
Klasy abstrakcyjne i interfejsy
Klasy abstrakcyjne i interfejsy Streszczenie Celem wykładu jest omówienie klas abstrakcyjnych i interfejsów w Javie. Czas wykładu 45 minut. Rozwiązanie w miarę standardowego zadania matematycznego (i nie
Programowanie obiektowe w języku
Programowanie obiektowe w języku C++ Stanisław Gepner sgepner@meil.pw.edu.pl Dziedziczenie Wstęp Zacznijmy od przykładu Przykład rolniczy Każde zwierzątko wydaje dźwięk Każde się tak samo porusza Musimy
Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016
Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac
Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura
Programowanie komputerów Programowanie obiektowe. Typy zmiennych proste i złożone Typy zmiennych "wbudowane", tj. identyfikowane przez słowa kluczowe, są określane jako proste: int short long float double
Java - tablice, konstruktory, dziedziczenie i hermetyzacja
Java - tablice, konstruktory, dziedziczenie i hermetyzacja Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU zmienne tablicowe konstruktory klas dziedziczenie hermetyzacja
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 4. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Przeciążanie operatorów Funkcje zaprzyjaźnione Na
Programowanie obiektowe
Laboratorium z przedmiotu - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia. Wprowadzenie teoretyczne.
PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec
PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych
Dziedziczenie i interfejsy
Dziedziczenie i interfejsy 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
1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?
1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie
Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne
Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne Przeciążenie funkcji polega na użyciu funkcji z tą samą nazwą, które mają różne listy argumentów(różne typy, różna ilość lub to i inne).
dr inż. Jarosław Forenc
Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013 Wykład nr 6 (07.12.2012) dr inż. Jarosław Forenc Rok
Dokumentacja do API Javy.
Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu
Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.
Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na
Podstawy Programowania Obiektowego
Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja
Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki zaprojektowany jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych jest to język pozwalający na programowanie zarówno proceduralne
Programowanie II. Lista 3. Modyfikatory dostępu plik TKLientBanku.h
Programowanie II Lista 3 Modyfikatory dostępu plik TKLientBanku.h plik z funkcją main Przyjaźń Dziedziczenie Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące. Jest to
Dziedziczenie. Tomasz Borzyszkowski
Dziedziczenie Tomasz Borzyszkowski Podstawy Zobacz: Dziedzictwo1.java Dziedzictwo2.java Dziedziczenie jest jedną z podstawowych cech OOP ponieważ umożliwia łatwe implementowanie klasyfikacji hierarchicznych.
1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami
1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.
Wprowadzenie do programowanie obiektowego w języku C++
Wprowadzenie do programowanie obiektowego w języku C++ Część trzecia Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura
Materiały do zajęć VII
Spis treści I. Klasy Materiały do zajęć VII II. III. Konstruktor Właściwości i indeksatory Klasy Programowanie obiektowe wiadomości wstępne Paradygmat programowania obiektowego Abstrakcja Hermetyzacja
Programowanie obiektowe
Programowanie obiektowe IV. Interfejsy i klasy wewnętrzne Małgorzata Prolejko OBI JA16Z03 Plan Właściwości interfejsów. Interfejsy a klasy abstrakcyjne. Klonowanie obiektów. Klasy wewnętrzne. Dostęp do
Polimorfizm, metody wirtualne i klasy abstrakcyjne
Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,
PHP 5 język obiektowy
PHP 5 język obiektowy Wprowadzenie Klasa w PHP jest traktowana jak zbiór, rodzaj różnych typów danych. Stanowi przepis jak stworzyć konkretne obiekty (instancje klasy), jest definicją obiektów. Klasa reprezentuje
Laboratorium 1 - Programowanie proceduralne i obiektowe
Laboratorium 1 - Programowanie proceduralne i obiektowe mgr inż. Kajetan Kurus 4 marca 2014 1 Podstawy teoretyczne 1. Programowanie proceduralne (powtórzenie z poprzedniego semestru) (a) Czym się charakteryzuje?
Programowanie obiektowe
Wykład 2 28 lutego 2019 Plan wykładu 1 2 3 4 5 Plan wykładu 1 2 3 4 5 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie; standardy ISO i ECMA; podobny składniowo do C++; Język C Krótka
Deklaracja i definicja metod, zwracanie wartości z metod, przekazywania parametrów do metod
Definiowanie klas w C#, składowe klasy, modyfikatory dostępu do klas i składowych klas Deklaracja i definicja metod, zwracanie wartości z metod, przekazywania parametrów do metod Zadanie 1 Napisz program
Operator przypisania. Jest czym innym niż konstruktor kopiujący!
Operator przypisania Jest czym innym niż konstruktor kopiujący! Domyślnie jest zdefiniowany jako przypisanie składowa po składowej (zatem niekoniecznie bajt po bajcie). Dla klasy X definiuje się jako X&
.NET Klasy, obiekty. ciąg dalszy
.NET Klasy, obiekty ciąg dalszy Przeciążanie operatorów 1 W języku C# istnieje możliwość zdefiniowania funkcjonalności dużej części operatorów dla typów stworzonych przez użytkownika. Dzięki takiemu zabiegowi,
Wyjątki (exceptions)
Instrukcja laboratoryjna nr 6 Programowanie w języku C 2 (C++ poziom zaawansowany) Wyjątki (exceptions) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp Wyjątki (ang.
Deklaracja struktury w C++
Struktury to złożone typy danych pozwalające przechowywać różne informacje. Za pomocą struktur możliwe jest grupowanie wielu zmiennych o różnych typach w jeden obiekt. Strukturę można nazywać obiektem
Programowanie Obiektowe i C++
Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 6.11.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 6.11.2006 1 / 138 Operator przypisania Jest czym innym niż konstruktor kopiujacy!
Programowanie w języku C++
Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi
Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska
Instytut Mechaniki i Inżynierii Obliczeniowej www.imio.polsl.pl fb.com/imiopolsl @imiopolsl Wydział Mechaniczny Technologiczny Politechnika Śląska Języki programowania z programowaniem obiektowym Laboratorium
Zaawansowane programowanie w C++ (PCP)
Zaawansowane programowanie w C++ (PCP) Wykład 3 - polimorfizm. dr inż. Robert Nowak - p. 1/14 Powtórzenie Powtórzenie: klasy autonomiczne: konstruktor, konstruktor kopiujacy, operator przypisania, destruktor
C++ - [4-7] Polimorfizm
Slajd 1 z 14 C++ - [4-7] Polimorfizm Nysa 2004-2013. Autor: Wojciech Galiński. wersja dnia 20 maja 2013 r. Slajd 2 z 14 Polimorfizm i klasa polimorficzna POLIMORFIZM (cytat z Wikipedii) (wielopostaciowość)
int suma; pralka czerwona; // definicja egzemplarza obiektu pralka * wskaŝ; // definicja wskaźnika pralka & ruda = czerwona; // definicja referencji
Pojęcie klasy Typ zmiennych informuje: o ich rozmiarze w pamięci, jaki rodzaj informacji mogą zawierać, jakie działania moŝna na nich wykonywać. W C++ dane mogą zostać powiązane z funkcjami - znaczy to,
Jak napisać program obliczający pola powierzchni różnych figur płaskich?
Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy
Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.
Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą
Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład V - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Programowanie obiektowe Dziedziczenie (inheritance) - mechanizm
4. Funkcje. Przykłady
4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni
PARADYGMATY PROGRAMOWANIA Wykład 4
PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej
Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?
Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz
Podstawy programowania w języku C++ Zadania - dziedziczenie i polimorfizm
Podstawy programowania w języku C++ Zadania - dziedziczenie i polimorfizm Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki
Klasa, metody, rozwijanie w linii
Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.
Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:
Języki Programowania Prowadząca: dr inż. Hanna Zbroszczyk e-mail: gos@if.pw.edu.pl tel: +48 22 234 58 51 Konsultacje: piątek: 12.00 13.30 www: http://www.if.pw.edu.pl/~gos/students/jp Politechnika Warszawska
Funkcje wirtualne. Wskaźniki do klas pochodnych są podstawą dla funkcji wirtualnych i polimorfizmu dynamicznego.
Funkcje wirtualne W C++ polimorfizm jest zrealizowany w dwa sposoby: na etapie kompilacji i na etapie wykonania. Na etapie kompilacji polimorfizm jest zrealizowany poprzez przeciążenie funkcji i operatorów.
Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie:
Rozdział 10 Przeciążanie operatorów 10.1 Definicje Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie: operator op gdzie