TEMAT : KLASY DZIEDZICZENIE

Save this PDF as:
 WORD  PNG  TXT  JPG

Wielkość: px
Rozpocząć pokaz od strony:

Download "TEMAT : KLASY DZIEDZICZENIE"

Transkrypt

1 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ą podstawową). Klasa pochodna dziedziczy dane oraz funkcje składowe z klasy podstawowej. W ten sposób nie musimy tworzyć całego kodu klasy pochodnej a jedynie nowe jej elementy, które nie były do tej pory zaimplementowane w klasie podstawowej. Oczywiście klasa pochodna może stać się klasą podstawową dla kolejnej tworzonej przez nas klasy. W programowaniu obiektowym rozróżniamy następujące rodzaje dziedziczenia: dziedziczenie jednokrotne (pojedyncze) gdy klasa pochodna tworzona jest na podstawie tylko jednej klasy podstawowej (oczywiście klasa bazowa może dziedziczyć również z jakiejś innej klasy), dziedziczenie wielokrotne gdy klasa pochodna tworzona jest na podstawie wielu klas podstawowych. Zadanie 1 Przeanalizuj sposób implementacji przedstawionych poniżej dwóch klas CPunkt oraz CKolo. Jak mogłaby wyglądać definicja klasy CPunkt, gdyby programista nie zaplanował wykorzystania mechanizmu dziedziczenia danych i funkcji składowych klasy CPunkt przez klasę CKolo? Implementacja klasy CPunkt jako klasy podstawowej class CPunkt friend ostream & operator << (ostream &, const CPunkt &); public: CPunkt(double x = 0.0, double y = 0.0); ~CPunkt(); void SetPunkt (double x_t, double y_t); double GetX () const return x;; double GetY () const return y;; void Drukuj () const; protected: double x,y; ; CPunkt::CPunkt(double x_t, double y_t) SetPunkt(x_t,y_t); CPunkt::~CPunkt() void CPunkt::SetPunkt (double x_t, double y_t) x = x_t; y = y_t; void CPunkt::Drukuj () const cout << "[" << x << ", " << y << "]"; ostream & operator << (ostream & output, const CPunkt & pkt) output << "[" << pkt.x << ", " << pkt.y << "]"; return output; 1

2 Implementacja klasy CKolo dziedziczącej z klasy CPunkt class CKolo : public CPunkt friend ostream & operator << (ostream &, const CKolo &); public: CKolo(double R = 0.0, double x = 0.0, double y = 0.0); ~CKolo(); void SetR (double R_t); double GetR () const; double ObliczObszar () const; protected: double R; ; CKolo::CKolo(double R_t, double x_t, double y_t) : CPunkt(x_t,y_t) SetR(R_t); CKolo::~CKolo() void CKolo::SetR (double R_t) if (R_t >= 0.0) R = R_t; else R = 0.0; double CKolo::GetR () const return R; double CKolo::ObliczObszar () const return *R*R; ostream & operator << (ostream & output, const CKolo & kolo) output << "Srodek kola = " << CPunkt(kolo) << ", R = " << kolo.r; return output; Analiza istotnych elementów klas CPunkt oraz CKolo z punktu widzenia mechanizmu dziedziczenia W powyższym przykładzie widzimy propozycję dwóch klas. Pierwsza z nich, tj. klasa CPunkt, jest klasą podstawową dla klasy pochodnej CKolo. Zadaniem klasy CPunkt jest reprezentowanie w programie abstrakcyjnego obiektu punktu, o którym zakładamy, że definiują go jego współrzędne x i y. Klasa CKolo reprezentuje natomiast abstrakcyjny obiekt koła, które jest zdefiniowane przez współrzędne środka tego koła oraz długość jego promienia. Do ważnych elementów wykorzystywanych w powyższych klasach możemy zaliczyć: wybór sposobu dziedziczenia przez klasę CKolo class CKolo : public CPunkt Standard języka C++ przewiduje trzy rodzaje dziedziczenia: publiczne, chronione i prywatne. W rozważanym przykładzie klasa CKolo dziedziczy z klasy CPunkt wykorzystując do tego zadania interfejs publiczny. Dziedziczenie oznaczone jest dwukropkiem w nagłówku definicji klasy. Słowo kluczowe public określa rodzaj dziedziczenia, tj. dziedziczenie publiczne. Dalej w kolejności podajemy nazwę klasy podstawowej dla definiowanej właśnie klasy pochodnej. Dziedziczenie publiczne zakłada, że dane i funkcje składowe klasy podstawowej zadeklarowane jako public i private, stają się automatycznie danymi i funkcjami składowymi odpowiednio publicznymi i prywatnymi klasy pochodnej. Należy jednak mieć na 2

3 uwadze fakt, że prywatne składowe klasy podstawowej nie są bezpośrednio dostępne dla klas pochodnych. Klasa pochodna ma do nich dostęp za pośrednictwem publicznych funkcji dostępowych zdefiniowanych w klasie podstawowej. sposób określania dostępu do danych klasy podstawowej CPunkt protected: double x,y; Zadeklarowanie składowych x, y przy użyciu specyfikatora dostępu protected uniemożliwia bezpośredni dostęp do nich dla klientów klasy CPunkt w programie. Dostęp do danych mają funkcje składowe klasy oraz funkcje nią zaprzyjaźnione, natomiast bezpośredni dostęp do tych danych z programu jest możliwy wyłącznie poprzez odpowiednie publiczne funkcje dostępowe. W przypadku, gdy chcemy zastosować mechanizm dziedziczenia, w definicji klasy podstawowej najczęściej wykorzystujemy tryb dostępu protected. W ten sposób dostęp do danych mają funkcje składowe i funkcje zaprzyjaźnione zdefiniowane zarówno w klasie podstawowej jak i w klasie pochodnej. Wszystkie składowe publiczne i chronione klasy CPunkt są dziedziczone jako odpowiednio, składowe publiczne i chronione w klasie CKolo. Oznacza to, ze interfejs publiczny klasy CKolo zawiera zarówno publiczne składowe klasy CPunkt, jak i publiczne składowe klasy CKolo. sposób implementacji konstruktora klasy pochodnej CKolo / wywoływanie konstruktora klasy podstawowej przez konstruktor klasy pochodnej CKolo::CKolo(double R_t, double x_t, double y_t) : CPunkt(x_t,y_t) SetR(R_t); Konstruktor klasy CKolo wywołuje konstruktor klasy CPunkt, który jest odpowiedzialny za zainicjowanie tej części obiektu klasy CKolo, która pochodzi z klasy podstawowej CPunkt. Wartości x_t, y_t są przekazywane z konstruktora CKolo do konstruktora CPunkt, który zainicjuje nimi dane składowe klasy podstawowej. Dodatkowo inicjowana jest wartość promienia R poprzez funkcję SetR (w celu sprawdzenia poprawności wartości zadanego promienia). Należy pamiętać, że w przypadku, gdy konstruktor klasy podstawowej CPunkt nie zostanie przez nas wywołany jawnie w konstruktorze klasy pochodnej CKolo, operacja wywołania domyślnego konstruktora klasy CPunkt i tak zostałaby przeprowadzona dla domyślnych wartości x i y. implementacja funkcji zaprzyjaźnionych z klasą pochodną CKolo ostream & operator << (ostream & output, const CKolo & kolo) output << "Srodek kola = " << CPunkt(kolo) << ", R = " << kolo.r; return output; Funkcje zaprzyjaźnione z klasą podstawową nie są dziedziczone przez klasę pochodną. Tak więc w rozważanym przykładzie klasa pochodna CKolo nie może bezpośrednio wywołać zaprzyjaźnionej funkcji operatorowej klasy CPunkt przeciążającej operator wstawiania do strumienia <<. Istnieje jednak możliwość przeciążenia operatora << klasy CKolo w taki sposób, aby oprócz danych specyficznych dla obiektu koła, tzn. w naszym przykładzie promienia R, wyświetlone zostały również współrzędne środka koła. Operację taką umożliwia operacja rzutowania referencji do obiektu CKolo na klasę CPunkt. W wyniku takiego działania zostanie wywołany przeciążony operator << klasy CPunkt. deklaracja funkcji składowej obiektu jako funkcji stałej const void Drukuj () const; void CPunkt::Drukuj () const cout << "[" << x << ", " << y << "]"; Deklaracja funkcji składowej obiektu jako funkcji stałej const jest ważnym elementem programowania obiektowego. Wiąże się to z tym, że w przypadku deklaracji stałego obiektu pewnej klasy w kodzie programu, mamy możliwość nadania mu wartości jedynie w chwili jego tworzenia (poprzez konstruktor danej klasy), jednak wywołanie dowolnej z jego funkcji składowych 3

4 (nawet tych, które nie modyfikują wartości danych) nie jest dozwolone. Wyjątek stanowią funkcje zadeklarowane w obiekcie jako const zarówno w prototypie jak też w definicji definicji funkcji. Funkcje tak zdefiniowane nie mogą jednak modyfikować danych obiektu. Wykorzystanie klas CKolo i CPunkt w programie // // // Czesc 1 - Wykorzystanie klasy CPunkt oraz CKolo w programie // // CPunkt * ptrpunkt = 0; CPunkt punkta (30,50); CKolo * ptrkolo = 0; CKolo kolob (2.5,120,90); cout << "Czesc 1" << endl; cout << " " << endl; cout << "Punkt A: " << punkta << endl; cout << "Kolo B: " << kolob << endl << endl; // Czesc 2 - Traktujemy kolo jako punkt ('widzimy' jedynie czesc z klasy podstawowej) cout << "Czesc 2" << endl; cout << " " << endl; // Zad.1 Przypisanie adresu kola wskaznikowi ptrpunkt cout << "Kolo B (poprzez *ptrpunkt): " << *ptrpunkt << endl << endl; // Zad.2 Traktujemy kolob jako kolo (z rzutowaniem) // Przypisanie adresu kola wskaznikowi ptrpunkt // Rzutowanie wskaznika klasy podstawowej na wskaznik klasy pochodnej cout << "Kolo B (przez *ptrkolo): " << *ptrkolo << endl; cout << "Powierzchnia kola B (przez ptrkolo): " << ptrkolo->obliczobszar() << endl << endl; // Czesc 3 - Niebezpieczna operacja - Traktowanie punktu jako kola // Przypisanie adresu punktu wskaznikowi ptrpunkt ptrpunkt = &punkta; // Rzutowanie wskaznika klasy podstawowej na wskaznik klasy pochodnej cout << "Czesc 3" << endl; cout << " " << endl; cout << "Punkt A (poprzez *ptrkolo): " << *ptrkolo << endl; cout << "Powierzchnia obiektu ptrkolo: " << ptrkolo->obliczobszar() << endl << endl; Do ważnych elementów przedstawionych w kolejnych częściach w programie możemy zaliczyć: sposób deklaracji obiektów klasy CPunkt i CKolo oraz odpowiednich wskaźników do tych obiektów CPunkt * ptrpunkt = 0; CPunkt punkta (30,50); CKolo * ptrkolo = 0; CKolo kolob (2.5,120,90); Powyższy kod przedstawia deklarację obiektu punkta. Wywołaniu konstruktora towarzyszy nadaje wartości współrzędnym x 4

5 oraz y punktu w taki sposób, że x = 30, y = 50. Deklaracja wskaźnika ptrpunkt do typu CPunkt połączona jest z inicjacją wartością 0 (co oznacza, że wskaźnik nie wskazuje w tej chwili na żaden obiekt klasy CPunkt). Wskaźnik ptrpunkt służy do wskazywania na obiekty klasy CPunkt. Podobne operacje są wykonane w odniesieniu do obiektu klasy CKolo oraz wskaźnika do typu CKolo. Zauważmy, że kolob jest obiektem klasy pochodnej CKolo, która dziedziczy dane i funkcje składowe klasy podstawowej CPunkt. sposób wykorzystania zaprzyjaźnionych funkcji operatorowych wstawiania do strumienia << cout << "Punkt A: " << punkta << endl; cout << "Kolo B: " << kolob << endl << endl; Wypisując obiekty klasy podstawowej i pochodnej wykorzystujemy odpowiednie zaprzyjaźnione funkcje operatorowe zaimplemetowane zarówno w klasie CPunkt jak i w klasie CKolo. "traktowanie kola jako punktu" (w wyniku takiej operacji 'widzimy' jedynie tą cześć danych i funkcji składowych, która należy do klasy podstawowej) a) Przypisanie adresu obiektu kolob wskaźnikowi ptrpunkt. W przypadku dziedziczenia publicznego zawsze możliwe jest przypisanie wskaźnikowi klasy podstawowej CPunkt wskaźnika klasy pochodnej CKolo. Operacja taka jest dozwolona, gdyż obiekt klasy pochodnej CKolo jest jednocześnie obiektem klasy podstawowej CPunkt. Jednak wskaźnik do klasy podstawowej CPunkt 'widzi' wyłącznie tę część obiektu klasy pochodnej CKolo, która znalazła się w nim w wyniku dziedziczenia z klasy podstawowej. Wykonana jest przez kompilator niejawna konwersja wskaźnika do klasy pochodnej CKolo na wskaźnik do klasy podstawowej CPunkt. b) cout << "Kolo B (poprzez *ptrpunkt): " << *ptrpunkt << endl << endl; Wykonanie operacji wypisania obiektu kolob z wykorzystaniem do tego celu wskaźnika ptrpunkt spowoduje, że zobaczymy na ekranie jedynie informację o współrzędnych środka koła. "traktowanie koła jako koła" (z wykorzystaniem operacji rzutowania) a) Przypisanie adresu obiektu kolob wskaźnikowi ptrpunkt. b) Rzutowanie wskaźnika klasy podstawowej CPunkt na wskaznik klasy pochodnej CKolo. c) cout << "Kolo B (przez *ptrkolo): " << *ptrkolo << endl; cout << "Powierzchnia kola B (przez ptrkolo): " << ptrkolo->obliczobszar() << endl << endl; W wyniku wykonania powyższych instrukcji wypisane zostaną wszystkie informacje dotyczące obiektu kolob (wywołana zostanie funkcja operatorowa przeciążona w klasie CKolo) oraz wypisane zostanie pole koła reprezentowanego przez obiekt kolob (czyli wywołana zostanie właściwa funkcja obliczająca pole koła zaimplementowana w klasie CKolo). "traktowanie punktu jako koła" (niebezpieczna operacja) a) ptrpunkt = &punkta; Przypisanie adresu obiektu punkta wskaźnikowi ptrpunkt. b) Przypisanie adresu punktu (tj. adresu znajdującego się w zmiennej wskaźnikowej ptrpunkt) czyli wykonanie operacji rzutowania wskaźnika klasy podstawowej CPunkt na wskaźnik klasy pochodnej CKolo. Formalnie nie istnieje bezpośrednia możliwość przypisania wskaźnikowi klasy pochodnej CKolo wskaźnika do klasy 5

6 podstawowej CPunkt. Przypisanie takie jest bardzo niebezpieczne. W tym przypadku kompilator nie przeprowadza konwersji typów. c) cout << "Punkt A (poprzez *ptrkolo): " << *ptrkolo << endl; cout << "Powierzchnia obiektu ptrkolo: " << ptrkolo->obliczobszar() << endl << endl; W pierwszej z powyższych instrukcji mamy do czynienia z próbą wypisania obiektu punkta klasy CPunkt za pomocą przeciążonego w klasie CKolo operatora << oraz zdereferowanego wskaźnika ptrkolo. W takiej sytuacji promień R ma wartość 0 lub przyjmuje pewną bliżej niezdefiniowaną wartość znajdującą się w pamięci pod adresem, który powinien zawierać daną składową R. Dzieje się tak dlatego, że składowa R w tym przypadku nie istnieje (wskaźnik ptrkolo wskazuje bowiem na obiekt klasy CPunkt). Podobnie w drugiej instrukcji, wykorzystujemy wskaźnik ptrkolo (wskazujący w rzeczywistości na obiekt klasy CPunkt) do obliczenia pola obszaru koła. Wyznaczona powierzchnia ma wartość 0 lub inną wartość niezdefiniowaną, gdyż do stosownych obliczeń użyto nieokreśloną bliżej wartość promienia R. Co więcej należy pamiętać, że wywołanie w programie nie istniejącej funkcji składowej klasy (w tym przypadku funkcji, która nie istnieje w klasie CPunkt) może spowodować zakończenie działania programu i wyświetlenie komunikatu o błędzie. Zadanie 2 Cześć A: Implementacja klas. Napisać program umożliwiający tworzenie oraz dalsze wykorzystanie obiektów dwóch klas: COsoba oraz CPracownik. Klasą bazową jest klasa COsoba. W klasie tej przewidziane są chronione dane składowe: nazwisko (typu string) oraz wiek (typu int; wiek osoby powinien być z zakresu od 0 do 120). W klasie powinien zostać zdefiniowany konstruktor domyślny, który umożliwia również nadanie pewnych domyślnych wartości danym składowym klasy (nazwisko = "", wiek = 0). Wykorzystuje on odpowiednie funkcje dostępowe Set zdefiniowane w obiekcie (funkcje te nadają wartości danym składowym w klasie oraz sprawdzają poprawność zaproponowanych przez użytkownika danych). Ponadto w klasie powinny zostać zdefiniowane funkcje dostępowe Get (określone jako funkcje stałe), funkcja stała Drukuj wyświetlająca informacje o osobie na ekranie oraz działający w podobny sposób przeciążony operator wstawiania do strumienia <<. Drugą klasą jest klasa CPracownik, która dziedziczy dane i funkcje składowe klasy COsoba. Co więcej w klasie tej przewidziana jest prywatna dana składowa: zarobek_mies (typu int; zarobek pracownika podany w walucie PLN powinien być z zakresu od 0 do 5000). W klasie CPracownik powinien się znaleźć również odpowiednio: konstruktor domyślny, który umożliwia również nadanie pewnych domyślne wartości danym składowym klasy (nazwisko = "", wiek = 0, zarobek_mies = 0), funkcje Set, stałe funkcje Get, stała funkcja Drukuj wyświetlająca informacje o pracowniku na ekranie oraz działający w podobny sposób przeciążony operator wstawiania do strumienia <<. Dodatkowo w klasie powinna zostać zdefiniowana funkcja składowa Dochod_Roczny. Zadaniem funkcji jest przekazywanie do programu (przez return) rocznego dochodu uzyskanego przez pracownika (12 x zarobek_mies). Cześć B: Zadania testowe w programie. 1) Zadeklaruj w programie obiekt osobaa typu COsoba (przyjmujemy, że dane o osobie będą określone w dalszej części programu) oraz obiekt praca typu CPracownik (dane o pracowniku nadane zostaną przy tworzeniu obiektu). 2) Nadaj wartości danym obiektu osobaa wykorzystując do tego funkcje dostępowe Set. 3) Wypisz na ekranie dane o osobie osobaa wykorzystując do tego funkcję Drukuj oraz dane o pracowniku praca wykorzystując do tego przeciążony operator <<. 4) Zadeklaruj wskaźnik ptrosoba do typu COsoba oraz ptrpracownik do typu CPracownik. 5) Przypisz adres obiektu osobaa dla wskaźnika ptrosoba oraz adres obiektu praca dla wskaźnika ptrpracownik. 6) Wypisz na ekranie dane o osobie osobaa oraz pracowniku praca wykorzystując do tego funkcję Drukuj oraz wskaźniki ptrosoba i ptrpracownik. 7) Zadeklaruj wskaźnik ptr1 do typu COsoba i zainicjuj go adresem obiektu praca. 8) Wypisz na ekranie informacje o pracowniku praca wykorzystując do tego przeciążony operator << oraz zdereferowany wskaźnik ptr1. 9) Zadeklaruj wskaźnik ptr2 do typu COsoba i zainicjuj go adresem obiektu praca. 10) Zadeklaruj wskaźnik ptr3 do typu CPracownik. 11) Wykonaj operację rzutowania wskaźnika ptr2 do klasy COsoba na wskaźnik ptr3 klasy CPracownik. 12) Wykorzystując operator << oraz zdereferowany wskaźnik ptr3 wypisz na ekranie informacje o pracowniku praca. 13) Przypisz adres ptrosoba dla wskaźnika ptr2. 14) Wykonaj operację rzutowania wskaźnika ptr2 na wskaźnik ptrpracownik. 15) Wykorzystując operator << oraz wskaźnik ptrpracownik wypisz na ekranie informacje o pracowniku. 6

TEMAT : KLASY POLIMORFIZM

TEMAT : KLASY POLIMORFIZM TEMAT : KLASY POLIMORFIZM 1. Wprowadzenie do polimorfizmu i funkcji wirtualnych w języku C++ Język C++ zakłada, że w pewnych przypadkach uzasadnione jest tworzenie klas, których reprezentanci w programie

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Bardziej szczegółowo

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

Bardziej szczegółowo

Wprowadzenie do programowanie obiektowego w języku C++

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

Bardziej szczegółowo

Podstawy Programowania Obiektowego

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

Bardziej szczegółowo

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

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 2

PARADYGMATY PROGRAMOWANIA Wykład 2 PARADYGMATY PROGRAMOWANIA Wykład 2 Definiowanie klas w C++ - ciąg dalszy Lista inicjalizująca konstruktora Przeznaczenie - do inicjalizacji pól klasy z kwalifikatorem const i inicjalizacji obiektów składowych

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

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

Bardziej szczegółowo

dr inż. Jarosław Forenc

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

Bardziej szczegółowo

Dziedziczenie. Ogólna postać dziedziczenia klas:

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

Bardziej szczegółowo

Język C++ zajęcia nr 2

Język C++ zajęcia nr 2 Język C++ zajęcia nr 2 Inicjalizacja Definiowanie obiektu może być połączone z nadaniem mu wartości początkowej za pomocą inicjalizatora, który umieszczany jest po deklaratorze obiektu. W języku C++ inicjalizator

Bardziej szczegółowo

Abstrakcyjny typ danych

Abstrakcyjny typ danych Abstrakcyjny typ danych Abstrakcyjny Typ Danych (abstract data type-adt): zbiór wartości wraz z powiązanymi z nimi operacjami; operacje są zdefiniowane w sposób niezależny od implementacji; operacje są

Bardziej szczegółowo

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.

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 uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,

Bardziej szczegółowo

Języki i techniki programowania Ćwiczenia 3 Dziedziczenie

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

Bardziej szczegółowo

Programowanie obiektowe

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.

Bardziej szczegółowo

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

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ć

Bardziej szczegółowo

Język C++ umożliwia przeciążanie operatora, tzn. zmianę jego znaczenia na potrzeby danej klasy. W tym celu definiujemy funkcję o nazwie:

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

Bardziej szczegółowo

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

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów Rok akademicki 2016/2017, Wykład nr 5 2/40 Plan wykładu nr 5 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2016/2017

Bardziej szczegółowo

Klasy abstrakcyjne i interfejsy

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

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

Bardziej szczegółowo

Polimorfizm, metody wirtualne i klasy abstrakcyjne

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,

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

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

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie, część I

Programowanie, część I Programowanie, część I Rafał J. Wysocki Instytut Fizyki Teoretycznej, Wydział Fizyki UW 22 lutego 2011 Rafał J. Wysocki (rwys@fuw.edu.pl) Programowanie, część I 22 lutego 2011 1 / 80 Wstęp Informacje organizacyjne

Bardziej szczegółowo

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static), Tworzenie obiektów Dostęp do obiektów jest realizowany przez referencje. Obiekty w języku Java są tworzone poprzez użycie słowa kluczowego new. String lan = new String( Lancuch ); Obszary pamięci w których

Bardziej szczegółowo

Wykład 5 Okna MDI i SDI, dziedziczenie

Wykład 5 Okna MDI i SDI, dziedziczenie Wykład 5 Okna MDI i SDI, dziedziczenie Autor: Zofia Kruczkiewicz Zagadnienia 1. Aplikacja wielookienkowa. Zakładanie projektu typu CLR Windows Forms 1.1. Aplikacja typu MDI 1.2. Aplikacja typu SDI 2. Dziedziczenie

Bardziej szczegółowo

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

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

Bardziej szczegółowo

Technologie i usługi internetowe cz. 2

Technologie i usługi internetowe cz. 2 Technologie i usługi internetowe cz. 2 Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 15 luty 2014 r. 1 Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania,

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

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

Bardziej szczegółowo

Zaawansowane programowanie w języku C++ Programowanie obiektowe

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

Bardziej szczegółowo

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

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory

Bardziej szczegółowo

Programowanie Obiektowe i C++

Programowanie Obiektowe i C++ Programowanie Obiektowe i C++ Marcin Benke Instytut Informatyki UW 30.10.2006 Marcin Benke (IIUW) Programowanie Obiektowe i C++ 30.10.2006 85 / 112 Zgodność typów Rozważmy klasy class A { //... }; class

Bardziej szczegółowo

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50. Programowanie (język C++) referencje Wykład 2. Referencje (1) Referencja (odnośnik) jest zmienną identyfikującą inną zmienną. Wykonanie operacji na referencji ma taki sam skutek, jak wykonanie tejŝe operacji

Bardziej szczegółowo

Programowanie obiektowe w C++ Wykład 12

Programowanie obiektowe w C++ Wykład 12 Programowanie obiektowe w C++ Wykład 12 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) 1 / 22 Zakresowe pętle for double tab[5] {1.12,2.23,3.33,4.12,5.22 for(double x: tab)

Bardziej szczegółowo

Programowanie obiektowe i zdarzeniowe

Programowanie obiektowe i zdarzeniowe Marek Tabędzki Programowanie obiektowe i zdarzeniowe 1/23 Programowanie obiektowe i zdarzeniowe wykład 6 polimorfizm Na poprzednim wykładzie: dziedziczenie jest sposobem na utworzenie nowej klasy na podstawie

Bardziej szczegółowo

C++ - [4-7] Polimorfizm

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ść)

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

Bardziej szczegółowo

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej Programowanie obiektowe Interfejsy Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Interfejsy Autor: Paweł Rogaliński Instytut Informatyki,

Bardziej szczegółowo

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

PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów. PROGRAMOWANIE OBIEKTOWE W C++ cz. 2 Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów. Dziedziczenie Dziedziczenie jest to technika pozwalaj c na definiowanie nowej klasy przy wykorzystaniu

Bardziej szczegółowo

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc Rok akademicki 2016/2017, Wykład nr 4 2/45 Plan wykładu nr 4 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia stacjonarne I stopnia Rok akademicki 2016/2017

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 3

PARADYGMATY PROGRAMOWANIA Wykład 3 PARADYGMATY PROGRAMOWANIA Wykład 3 Definiowanie operatorów i ich przeciążanie Przykłady zastosowania operatorów: a) operator podstawienia ( = ) obiektów o złożonej strukturze, b) operatory działania na

Bardziej szczegółowo

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Obiekty reprezentują pewne pojęcia, przedmioty, elementy rzeczywistości. Obiekty udostępniają swoje usługi: metody operacje,

Bardziej szczegółowo

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++ IMIĘ i NAZWISKO: przykładowe odpowiedzi NR: 0 EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++ 1. Napisz precyzyjnie co to jest ptr jeśli: const * const Foo ptr; ptr to stały wskaźnik do stałego obiektu typu Foo

Bardziej szczegółowo

Szablony funkcji i szablony klas

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

Bardziej szczegółowo

Definiowanie własnych klas

Definiowanie własnych klas Programowanie obiektowe Definiowanie własnych klas Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Definiowanie własnych klas Autor:

Bardziej szczegółowo

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i

Bardziej szczegółowo

Konstruktor kopiujacy

Konstruktor kopiujacy Konstruktor kopiujacy Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępniony

Bardziej szczegółowo

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

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d. Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 7 Przegląd typów strukturalnych - klasy i obiekty - c.d. Klasa - powtórzenie

Bardziej szczegółowo

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

Programowanie 2. Język C++. Wykład 9. 9.1 Ukrywanie metod, metody nadpisane... 1 9.2 Metody wirtualne, wirtualny destruktor... 2 9.3 Metody czysto wirtualne... 6 9.4 Klasy abstrakcyjne... 7 9.5 Wielodziedziczenie... 9 9.1 Ukrywanie metod,

Bardziej szczegółowo

Wprowadzenie do obiektowości

Wprowadzenie do obiektowości Wprowadzenie do obiektowości Obiekt jest abstrakcją pewnego konkretnego bytu ze świata rzeczywistego, reprezentujący rzecz (obiekt fizyczny), pojęcie (obiekt konceptualny) lub pewny byt programistyczny

Bardziej szczegółowo

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

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;

Bardziej szczegółowo

Programowanie, część I

Programowanie, część I 11 marca 2010 Kontakt Wstęp Informacje organizacyjne Materiał na ćwiczenia Plan wykładu http://www.fuw.edu.pl/~rwys/prog rwys@fuw.edu.pl tel. 22 55 32 263 Materiał na ćwiczenia Informacje organizacyjne

Bardziej szczegółowo

Wstęp do Programowania 2

Wstęp do Programowania 2 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:

Bardziej szczegółowo

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

Bardziej szczegółowo

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi 1. Napisz wskaźnik do funkcji fun tak zdeklarowanej: T* fun( int, double const& ) const; definicja wskaźnika musi być precyzyjna, inaczej

Bardziej szczegółowo

Wykład 4: Klasy i Metody

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

Bardziej szczegółowo

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

Bardziej szczegółowo

Język ludzki kod maszynowy

Język ludzki kod maszynowy Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza

Bardziej szczegółowo

Programowanie strukturalne i obiektowe. Funkcje

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

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

1 Dziedziczenie. 1.1 Koncepcja dziedziczenia. Ćwiczenie 3

1 Dziedziczenie. 1.1 Koncepcja dziedziczenia. Ćwiczenie 3 Ć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

Bardziej szczegółowo

Laboratorium 1 - Programowanie proceduralne i obiektowe

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?

Bardziej szczegółowo

Wyliczanie wyrażenia obiekty tymczasowe

Wyliczanie wyrażenia obiekty tymczasowe Wyliczanie wyrażenia obiekty tymczasowe Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2013 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu

Bardziej szczegółowo

Programowanie obiektowe w języku

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

Bardziej szczegółowo

C-struktury wykład. Dorota Pylak

C-struktury wykład. Dorota Pylak C-struktury wykład Dorota Pylak C-struktury W języku C++, jak w każdym języku obiektowym, mamy możliwość definiowania własnych typów danych, wraz z określeniem operacji, jakie na tych danych można wykonywać.

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wstęp do programowania obiektowego. Wykład 2

Wstęp do programowania obiektowego. Wykład 2 Wstęp do programowania obiektowego Wykład 2 1 CECHY I KONCEPCJA PROGRAMOWANIA OBIEKTOWEGO 2 Cechy programowania obiektowego Dla wielu problemów podejście obiektowe jest zgodne z rzeczywistością (łatwe

Bardziej szczegółowo

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

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie w Internecie. Java

Programowanie w Internecie. Java Programowanie w Internecie Java Autor: dr inż. Zofia Kruczkiewicz Literatura: L. Lemay, R. Cadenhead P. Naughton Krzysztof Barteczko Boone Barry Java 2 dla każdego Podręcznik Języka Programowania Java

Bardziej szczegółowo

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

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Przeciążanie operatorów Słowo

Bardziej szczegółowo

Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg

Programowanie obiektowe. Materiały przygotował: mgr inż. Wojciech Frohmberg Programowanie obiektowe Materiały przygotował: mgr inż. Wojciech Frohmberg Konstruktor Konstruktor w językach zorientowanych obiektowo pełni podwójną rolę: przydziela pamięć na obiekt, zdefiniowany klasą

Bardziej szczegółowo

.NET Klasy, obiekty. ciąg dalszy

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

Bardziej szczegółowo

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

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

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

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Część 1. Teoria Wyjaśnij pojęcia, podaj przykład: klasa obiekt konstruktor destruktor kapsułkowanie (hermetyzacja) wskaźnik this

Bardziej szczegółowo

Języki programowania imperatywnego

Języki programowania imperatywnego Katedra Inżynierii Wiedzy laborki 7 i 8 Klasy abstrakcyjne klasa abstrakcyjna pozwala wymusić implementację metody; klasa oznaczona jest jako abstrakcyjna, jeżeli przynajmniej jedna metoda jest abstrakcyjna;

Bardziej szczegółowo

Programowanie obiektowe

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

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Pojęcie struktury i klasy. Konstruktor i destruktor. Spotkanie 08 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Spotkanie 08 Klasy: definicja a deklaracja klasy dane składowe

Bardziej szczegółowo

Dziedziczenie. Zadanie 1

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

Bardziej szczegółowo

Techniki Programowania wskaźniki

Techniki Programowania wskaźniki Techniki Programowania wskaźniki Łukasz Madej Katedra Informatyki Stosowanej i Modelowania Wykłady opracowane we współpracy z Danutą Szeligą, Łukaszem Sztangretem Wskaźniki Dla typu T zapis T* oznacza

Bardziej szczegółowo

Przeciążenie operatorów

Przeciążenie operatorów Przeciążenie operatorów W C++ można przeciążyć większość operatory tak, żeby wykonywali zadania, charakterystyczne dla danej klasy Po przeciążeniu odpowiednich operatorów można posługiwać się obiektami

Bardziej szczegółowo

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

Struktury Struktura polami struct struct struct struct

Struktury Struktura polami struct struct struct struct Struktury Struktura jest zbiorem zmiennych występujących pod wspólna nazwą. Zmienne wchodzące w skład struktury nazywane są polami lub elementami, a czasem członkami struktury. Struktury używamy, jeśli

Bardziej szczegółowo

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

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016 Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal

Bardziej szczegółowo

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

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.

Bardziej szczegółowo

Dziedziczenie. Tomasz Borzyszkowski

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.

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

Bardziej szczegółowo

Technologie obiektowe

Technologie obiektowe WYKŁAD dr inż. Paweł Jarosz Instytut Informatyki Politechnika Krakowska mail: pjarosz@pk.edu.pl LABORATORIUM dr inż. Paweł Jarosz (3 grupy) mgr inż. Piotr Szuster (3 grupy) warunki zaliczenia Obecność

Bardziej szczegółowo

Przeciążanie operatorów

Przeciążanie operatorów Instrukcja laboratoryjna nr 4 Programowanie w języku C 2 (C++ poziom zaawansowany) Przeciążanie operatorów dr inż. Wilk-Jakubowski Jacek mgr inż. Lasota Maciej dr inż. Kaczmarek Tomasz Wprowadzenie Oprócz

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE WSKAŹNIKI KLASOWE Wskaźniki klasowe Każdy obiekt zajmuje fragment pamięci i wszystkie obiekty tego samego typu zajmują fragmenty pamięci tej samej długości początek miejsca w pamięci zajmowanego przez

Bardziej szczegółowo

Szablony funkcji i klas (templates)

Szablony funkcji i klas (templates) Instrukcja laboratoryjna nr 3 Programowanie w języku C 2 (C++ poziom zaawansowany) Szablony funkcji i klas (templates) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp

Bardziej szczegółowo

Wprowadzenie do szablonów szablony funkcji

Wprowadzenie do szablonów szablony funkcji Wprowadzenie do szablonów szablony funkcji Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do

Bardziej szczegółowo

Operatory na rzecz typu TString

Operatory na rzecz typu TString Operatory na rzecz typu TString Dopiszmy w definicji klasy operator[], dzięki któremu potraktujemy obiekt jak tablicę class TString { public: char& operator[]( size_t n ); const char& operator[]( size_t

Bardziej szczegółowo