Wykład 8: klasy cz. 4

Podobne dokumenty
Wykład 5: Klasy cz. 3

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

Wykład 9: Polimorfizm i klasy wirtualne

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

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

Wykład 1: Wskaźniki i zmienne dynamiczne

Wykład 9: Metody wirtualne i polimorfizm

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

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

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

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

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

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: 13. Rekurencja. 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: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

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

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.

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

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

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

Materiały do zajęć VII

TEMAT : KLASY DZIEDZICZENIE

Wykład 4: Klasy i Metody

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

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

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

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

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

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

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

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

Rozdział 4 KLASY, OBIEKTY, METODY

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

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

Kurs WWW. Paweł Rajba.

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

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

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

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

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

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

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

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

Programowanie obiektowe

Język C++ Programowanie obiektowe

Języki i paradygmaty programowania

Programowanie Obiektowo Zorientowane w języku C++ Klasy, pola, metody

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

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

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Podstawy Programowania Obiektowego

Programowanie, część I

PHP 5 język obiektowy

Enkapsulacja, dziedziczenie, polimorfizm

.NET Klasy, obiekty. ciąg dalszy

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

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

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

Podstawy Programowania Obiektowego

Programowanie obiektowe

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

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

Deklaracja struktury w C++

dr inż. Jarosław Forenc

OBIEKTY PHP. G. Panuś

Klasy abstrakcyjne i interfejsy

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

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

Programowanie obiektowe

Programowanie obiektowe

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

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

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

Dziedziczenie jednobazowe, poliformizm

Definicje klas i obiektów. Tomasz Borzyszkowski

Interfejsy i klasy wewnętrzne

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Szablony klas, zastosowanie szablonów w programach

Definiowanie własnych klas

ZASADY PROGRAMOWANIA KOMPUTERÓW

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

Multimedia JAVA. Historia

Wstęp do Programowania 2

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

Podstawy programowania obiektowego

Wprowadzenie do programowanie obiektowego w języku C++

Podstawy programowania III

Język C++ zajęcia nr 2

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

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

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Programowanie obiektowe - 1.

Klasy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 13

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

Przeciążenie operatorów

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

Transkrypt:

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 Dynamiczne tworzenie obiektów klas 2

Dynamiczne obiekty klas Możemy utworzyć obiekt dynamiczny alokując pamięć i używając wskaźników (podobnie jak dynamiczne zmienne proste i struktury). Obiekt tworzy się za pomocą operatora new i przypisuje do wskaźnika tego samego typu co klasa. Obiekt usuwa się z pamięci za pomocą operatora delete. Operacja ta zwalnia pamięć i wywołuje destruktor obiektu. Obiekty stworzone w sposób dynamiczny zawsze trzeba ręcznie usunąć z pamięci gdy nie są już używane (np. podczas zamykania programu). W C++ nie ma mechanizmów automatycznego oczyszczania pamięci tak jak np. w Java i C#. 3

Dynamiczne obiekty klas Do składników klasy dynamicznej możemy odwoływać się operatorem strzałki -> 4

Dynamiczne obiekty klas Do składników klasy dynamicznej możemy również odwoływać się operatorem strzałki. (kropka), ale zapis ten niej jest intuicyjny. 5

Dynamiczne obiekty klas Wskaźniki do obiektów możemy zapamiętywać w tablicach. 6

Programowanie obiektowe Składniki statyczne klas 7

Składniki statyczne klas Pola statyczne stosujemy, gdy poszczególne egzemplarze obiektów danej klasy powinny posługiwać się tą samą daną. Dana statyczna jest w pamięci tworzona jednokrotnie i jest wspólna dla wszystkich egzemplarzy obiektów danej klasy. Co więcej: istnieje nawet wtedy, gdy jeszcze nie zdefiniowaliśmy ani jednego egzemplarza obiektu tej klasy. class klasa{ public : int x ; static int skladnik ; }; 8

Składniki statyczne klas Deklaracja składnika statycznego w ciele klasy nie jest jego definicją. Definicję musimy umieścić gdzieś tak, by miała zakres pliku. Czyli tak, jakbyśmy umieszczali definicję zmiennej globalnej. Definicja taka może zawierać inicjalizację. int klasa::składnik = 6 ; Składnik statyczny może być także typu private. Inicjalizacja składnika statycznego możliwa jest nawet jeśli jest on typu private. Po inicjalizacji prywatny składnik statyczny nie może być przez obcych czytany ani zapisywany. 9

Składniki statyczne klas Do składnika statycznego można odwołać się na trzy sposoby: 1. Za pomocą nazwy klasy i operatora zakresu :: klasa::składnik 2. Jeśli istnieją już jakieś egzemplarze obiektów klasy, to możemy posłużyć się operatorem. obiekt.składnik 3. Jeśli mamy wskaźnik do obiektu stosujemy operator -> *wsk = &obiekt; wsk->składnik; 10

Składniki statyczne klas 11

Składniki statyczne klas Przykład: Klasa automatycznie nadająca kolejne numery id nowo tworzonym obiektom 12

Programowanie obiektowe Konstruktor i destruktory c.d. 13

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

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(); 15

Konstruktor i destruktor Konstruktor domniemany Konstruktor domniemany to taki konstruktor, który można wywołać bez żadnego argumentu. class klasa { public : klasa(); //konst. domniemany }; 16

Konstruktor i destruktor Konstruktor domniemany Konstruktor domniemany 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). 17

Konstruktor i destruktor Konstruktor domniemany z parametrami domyślnymi 18

Konstruktor i destruktor Przeciążanie konstruktorów Jedna klasa może posiadać kilka konstruktorów 19

Konstruktor i destruktor Przeciążanie konstruktorów 20

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

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

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

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

Konstruktor i destruktor 25

Programowanie obiektowe Obiekty i funkcje const 26

Składniki statyczne klas Funkcje składowe typu const funkcje takie nie mogą modyfikować składników klas. Modyfikator const za metodą informuje, że nie ulega zmianie stan obiektu mogą one być używane dla obiektów typu const (obiektów stałych) 27

Składniki statyczne klas Skoro obiekt dom jest stały wolno używać tylko jego funkcji const. 28

Programowanie obiektowe Funkcje zaprzyjaźnione 29

Funkcje zaprzyjaźnione Funkcja zaprzyjaźniona to funkcja która ma prawo dostępu do prywatnych składników klasy. Wewnątrz definicji klasy wystarczy umieścić deklarację tej funkcji poprzedzoną słowem friend. Uwaga: to nie funkcja ma twierdzić, że jest zaprzyjaźniona. To klasa ma zadeklarować, że przyjaźni się z tą funkcją i nadaje jej prawo dostępu do składników prywatnych. Zatem słowo friend pojawia się tylko wewnątrz definicji klasy. Funkcja może być zaprzyjaźniona z wieloma klasami. 30

Funkcje zaprzyjaźnione 31

Programowanie obiektowe Listy obiektowe - przykład 32

Listy obiektowe - przykład Nasz program będzie składał się z dwóch klas: 1. klasa osoba obsługująca pojedynczy rekord; 2. Klasa lista implementująca listę jednokierunkową obiektów klasy osoba 33

Listy obiektowe - przykład Uwaga klasa lista nie dziedziczy po klasie osoba, a tylko z niej korzysta (tworzy zmienne dynamiczne typu osoba. O dziedziczeniu w następnym wykładzie. 34

Listy obiektowe - przykład Klasa lista nie ma bezpośredniego dostępu do pól prywatnych kasy osoba, musi korzystać z jej interfejsu (publicznych metod set. get.) 35

Listy obiektowe - przykład 36

Listy obiektowe - przykład Destruktor klasy lista sprząta po niej czyli zwalnia utworzone dynamicznie obiekty klasy osoba 37

Listy obiektowe - przykład Obiekt lista możemy utworzyć zarówno statycznie, jak i dynamicznie efekt będzie prawie ten sam, tzn. w obu wypadkach obiekty osoba będą tworzone dynamicznie. Główna różnica to moment wywołania destruktora listy. 38

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 39