Wykład 5: Klasy cz. 3

Podobne dokumenty
Wykład 8: klasy cz. 4

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Wykład 1: Wskaźniki i zmienne dynamiczne

Wykład 9: Metody wirtualne i polimorfizm

Wykład 9: Polimorfizm i klasy wirtualne

Podstawy programowania. Wykład: 6. Tablice statyczne. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 11. Trochę różnych przykładów. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

Wykład 4: Klasy i Metody

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

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

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

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

TEMAT : KLASY DZIEDZICZENIE

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

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

Wykład 3 Składnia języka C# (cz. 2)

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Rozdział 4 KLASY, OBIEKTY, METODY

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

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

Materiały do zajęć VII

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

Podstawy Programowania Obiektowego

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

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

Programowanie obiektowe

Podstawy Programowania Obiektowego

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

Wykład VI PASCAL procedury i funkcje przekazywanie parametrów,

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

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 6. Karol Tarnowski A-1 p.

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

Laboratorium nr 10. Temat: Funkcje cz.2.

Języki i techniki programowania Ćwiczenia 2

Języki i paradygmaty programowania

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

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

Co to jest klasa? Z programistycznego punktu widzenia klasa stanowi typ danych, który odwzorowuje wspólne cechy jakiegoś obiektu.

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

Wprowadzenie do programowanie obiektowego w języku C++

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

Programowanie obiektowe

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

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

.NET Klasy, obiekty. ciąg dalszy

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

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

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

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

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

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

Język C++ zajęcia nr 2

10. Programowanie obiektowe w PHP5

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Programowanie obiektowe

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

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

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

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

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Dziedziczenie. Ogólna postać dziedziczenia klas:

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Szablony klas, zastosowanie szablonów w programach

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

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

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

Klasy i obiekty cz I Klasy, obiekty, podstawy używania obiektów

Wykład 2 Składnia języka C# (cz. 1)

Konstruktor kopiujacy

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Programowanie, część I

Kurs WWW. Paweł Rajba.

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

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?

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

Programowanie obiektowe i C++ dla matematyków

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

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.

Programowanie obiektowe - 1.

PARADYGMATY PROGRAMOWANIA Wykład 4

Definicje klas i obiektów. Tomasz Borzyszkowski

Programowanie strukturalne i obiektowe. Funkcje

C++ Przeładowanie operatorów i wzorce w klasach

dr inż. Jarosław Forenc

Transkrypt:

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 przeanalizujmy zainicjalizowanie pola obiektu jakąś wartością: 3

Konstruktor i destruktor Tym razem dodamy do obiektu konstruktor 4

Konstruktor i destruktor Konstruktor to metoda, która nazywa się tak samo jak klasa. Uwaga: przed konstruktorem nie ma żadnego określenia typu wartości zwracanej. Nie może być tam nawet typu void. Po prostu nie stoi tam nic. W konstruktorze nie może wystąpić instrukcja return. Konstruktor możemy wywołać na dwa sposoby: numer a = numer(15) ; numer b(15) ; 5

Konstruktor i destruktor DESTRUKTOR Przeciwieństwem konstruktora jest destruktor - funkcja składowa wywoływana wtedy, gdy obiekt danej klasy ma być zlikwidowany. Destruktor nazywa się tak samo, jak klasa z tym, że przed nazwą ma znak ~ (wężyk). Podobnie jak konstruktor - nie ma on określenia typu zwracanego. 6

Konstruktor i destruktor 7

- podstawy Przesłanianie i przeciążanie elementów klas 8

Przesłanianie nazw Ponieważ nazwy składników klasy (danych i funkcji) mają zakres klasy, więc w obrębie klasy zasłaniają elementy o takiej samej nazwie leżące poza klasą. Np. zmienna int ile; będąca składnikiem klasy zasłania w klasie ewentualną zmienną ile o zakresie globalnym lub lokalnym. 9

Wskaźnik this W niestatycznych metodach klasy występuje wskaźnik this - wskazuje on na obiekt, dla którego została wywołana metoda. 10

Przesłanianie nazw - przykład Operator rozróżniania przestrzeni nazw :: pozwala dostać się do globalnej zmiennej programu, nawet jeżeli jest przesłonięta przez zmienną obiektu 11

Przeciążanie metod Przeciążanie metod (ang. Overloading) - pozwala na tworzenie metod o takich samych nazwach, ale różnych parametrach. Nieprawidłowe jest: utworzenie w jednej klasie dwóch metod o identycznej nazwie i przyjmującej takie same parametry, metod o takiej samej nazwie i parametrach, ale różniące się tylko zwracanym typem. 12

Przeciążanie metod 13

Programowanie obiektowe Konstruktor i destruktory (część II) 14 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I - WYKŁAD

Konstruktor i destruktor Jawne wywołanie konstruktora Obiekt może być też stworzony przez jawne wywołanie konstruktora. W efekcie otrzymujemy obiekt, który nie ma nazwy, a czas jego życia ogranicza się do wyrażenia, w którym go użyto. nazwa_klasy(argumenty) Uwaga: nie stosujemy zapisu: obiekt.funkcja_składowa(argumenty) Konstruktor nie jest wywoływany na rzecz jakiegoś obiektu, bo ten obiekt jeszcze nie istnieje. Zadaniem konstruktora jest go utworzyć. 15 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I - WYKŁAD

Konstruktor i destruktor Jawne wywołanie destruktora Należy podać całą jego nazwę. Jawne wywołanie destruktora nie może się zacząć od ~(wężyka) i wcześniej musi być albo obiekt, na rzecz którego jest wywoływany i kropka lub wskaźnik do obiektu -> obiekt.~klasa(); wskaznik->~klasa(); 16 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I - WYKŁAD

Konstruktor i destruktor Konstruktor domyślny Konstruktor domyślny to konstruktor, który można wywołać bez żadnego argumentu. class klasa { public : klasa(); //konst. domyślny }; 17 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I - WYKŁAD

Konstruktor i destruktor Konstruktor domyślny Konstruktor domyślny może posiadać dowolną ilość parametrów, jednak wszystkie muszą mieć zdefiniowaną wartość domyślną (aby nie trzeba było podawać ich wartości podczas inicjacji klasy). 18 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I - WYKŁAD

Konstruktor i destruktor Konstruktor domyślny z parametrami domyślnymi 19

Konstruktor i destruktor Przeciążanie konstruktorów Jedna klasa może posiadać kilka konstruktorów 20 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I - WYKŁAD

Konstruktor i destruktor Przeciążanie konstruktorów 21 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I - WYKŁAD

Konstruktor i destruktor Lista inicjalizacyjna konstruktora Czasami zachodzi potrzeba zainicjowania zmiennej w trakcie tworzenia klasy, a nie po jej utworzeniu. Lista inicjalizacyjna to lista oddzielonych przecinkami identyfikatorów pól (składowych) z podanymi w nawiasach okrągłych argumentami dla konstruktorów obiektów będących składowymi tworzonego obiektu. Zwykle są to jednocześnie argumenty formalne definiowanego konstruktora, choć nie musi tak być. 22 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I - WYKŁAD

Konstruktor i destruktor Lista inicjalizacyjna konstruktora Wartość zmiennej WIEK, która jest argumentem konstruktora przypisywana jest zmiennej wiek, która jest składnikiem klasy. Po przecinku można wypisać kolejne inicjalizowane składowe. 23 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I - WYKŁAD

Konstruktor i destruktor Taki zapis ma kilka bardzo istotnych zalet: 1. Jest szybszy - różnice są znaczne gdy przyjdzie do wykonywania pomiarów czasowych. 2. Jest czytelniejszy - programista nie musi analizować zawartości konstruktora, by wiedzieć jaką domyślną wartością zostanie zainicjowana klasa. 3. Umożliwia inicjowanie zmiennych zdefiniowanych jako stałe (const). 4. Umożliwia inicjowanie zmiennych zdefiniowanych jako referencje (tylko tą metodą można zainicjować zmienną zadeklarowaną np. tak: int & zmienna;). 5. Jest metodą stosowaną przy dziedziczeniu klas. 24 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I - WYKŁAD

Konstruktor i destruktor Lista inicjalizacyjna konstruktora Zwróćmy uwagę, że w przypadku użycia listy inicjalizacyjnej ciało konstruktora jest puste. Można oczywiście umieścić w nim jakiejś instrukcje. Niektóre składowe mogą być inicjalizowane poprzez konstruktor a inne poprzez listę inicjalizacyjną. Jeśli w klasie tylko deklarujemy konstruktor, a jego definicję podajemy poza klasą, to w deklaracji listy inicjalizacyjnej nie umieszczamy. 25 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I - WYKŁAD

Konstruktor i destruktor 26 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I - WYKŁAD

- podstawy Przekazywanie do funkcji argumentów będących obiektami 27

Przekazywanie obiektów do funkcji Posługiwanie się obiektem własnej klasy jest podobne jak posługiwanie się obiektem typu int czy float. Między innymi mamy możliwość wysłania obiektu do funkcji jako argument (do każdej funkcji, niekoniecznie do funkcji składowych). 28

Przekazywanie obiektów do funkcji Przekazywanie obiektu przez wartość Domyślnie przesyłamy obiekt przez wartość czyli na potrzeby funkcji tworzona jest jego kopia. Uwaga: Jeśli obiekt jest duży, to proces kopiowania może trwać dłużej. Wielokrotne wysłanie przez wartość może wyraźnie wpływać na zwolnienie programu. 29

Przekazywanie obiektów do funkcji Przekazywanie obiektu przez wartość - przykład 30

Przekazywanie obiektów do funkcji Obiekt klasy Osoba przekazujemy do funkcji rodo() wewnątrz której jest modyfikowany Niestety nie zadziałało. 31

Przekazywanie obiektów do funkcji Należy pamiętać, że przekazując obiekt przez wartość wysyłamy do funkcji jego kopię, która jest usuwana z pamięci po zakończeniu funkcji. Zmiany wprowadzone na kopii nie wpłyną na oryginał. 32

Przekazywanie obiektów do funkcji Przekazywanie obiektu przez referencję Referencja jest drugą nazwa przezwiskiem - nie przezwiskiem klasy, ale danego egzemplarza jej obiektu. Wysyłając taki egzemplarz obiektu do funkcji na zasadzie przesłania przez referencję - sprawiamy, że nie jest on kopiowany. Funkcja ma dostęp do oryginału. 33

Przekazywanie obiektów do funkcji Przekazywanie obiektu przez referencję - przykład Klasa wygląda dokładnie tak samo jak w poprzednim przykładzie 34

Przekazywanie obiektów do funkcji Przekazujemy obiekt przez referencję tym razem zadziała prawidłowo 35

Przekazywanie obiektów do funkcji - przykład Tworzymy bardzo prostą tekstową grę RPG, w której będziemy wystawiać dwa obiekty klasy postać do walki w funkcji ring Projekt będzie rozwijany ;) 36

Przekazywanie obiektów do funkcji - przykład Losujemy parametry postaci 37

Przekazywanie obiektów do funkcji - przykład 38

Przekazywanie obiektów do funkcji - przykład Ponieważ obiekty przesłane zostały przez wartość widzimy cztery wywołania destruktora : dwa dla kopii użytych w funkcji ring() dwa dla oryginałów. 39

Przekazywanie obiektów do funkcji - przykład 40

Przekazywanie obiektów do funkcji - przykład Ponieważ obiekty przesłane zostały przez referencję widzimy tylko dwa wywołania destruktora - dwa dla oryginałów w chwili zamykania programu 41

Literatura: W prezentacji wykorzystano przykłady i fragmenty: Grębosz J. : Symfonia C++, Programowanie w języku C++ orientowane obiektowo, Wydawnictwo Edition 2000. Jakubczyk K.: Turbo Pascal i Borland C++ Przykłady, Helion. Warto zajrzeć także do: Sokół R. : Microsoft Visual Studio 2012 Programowanie w Ci C++, Helion. Kerninghan B. W., Ritchie D. M.: język ANSI C, Wydawnictwo Naukowo Techniczne. Dla bardziej zaawansowanych: Grębosz J. : Pasja C++, Wydawnictwo Edition 2000. Meyers S.: język C++ bardziej efektywnie, Wydawnictwo Naukowo Techniczne 42