Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula

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

Download "Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula"

Transkrypt

1 Programowanie i struktury danych Wykład 4 Dr Piotr ybula <cybula@math.uni.lodz.pl>

2 Typ wska ź nikowy int* pointer; //wskaźnik do zmiennych typu int pozwala na dostęp do dowolnego miejsca pamięci (zmienne wskaźnikowe są stałej wielkości zależnej jedynie od architektury procesora, np. 32-bit, 64-bit) zmienna typu wskaźnikowego zawiera adres zmiennej, na którą wskazuje (domyślnie adres przypadkowy): inicjalizacja adresem pustym NULL (stała zdefiniowana w bibliotece cstdlib) lub nullptr (słowo kluczowe dla c++11) pointer = nullptr; inicjalizacja adresem istniejącej zmiennej automatycznej (niebezpieczne) int variable; pointer = &variable; //operator adresu (referencji) inicjalizacja adresem zmiennej tworzonej dynamicznie pointer = new int; //operator alokacji pamięci delete pointer; //operator dealokacji pamięci dostęp do wskazywanej zmiennej tylko dla niepustych wskaźników p v if(pointer!=nullptr) cout<< *pointer; //operator dereferencji 2/47

3 Typ wska ź nikowy operator przypisania zmiennych wskaźnikowych kopiuje tylko adresy (nie wartości zmiennych wskazywanych) int* p1 = new int; int* p2; p2 = p1; //p2 wskazuje na to samo co p1 p1 współdzielenie adresu jednej zmiennej doprowadzi do powstania tzw. wskaźnika wiszącego (ang. dangling pointer) po zwolnieniu pamięci zajmowanej przez tę zmienną delete p1; cout << *p2; //zachowanie nieokreślone p1 p2 przed zwolnieniem pamięci dla zmiennej wskazywanej przez wskaźnik należy zmienić wartości dla wszystkich wskaźników wskazujących na tę zmienną poza jednym (tzw. zliczanie referencji) p2 = nullptr; //p2 nie wskazuje już na wspólną zmienną //p1 jest jedynym wskaźnikiem do tej zmiennej delete p1; //zwolnienie pamięci jest bezpieczne? p2 3/47

4 Wska ź niki do struktur dostęp do wskazywanej zmiennej strukturalnej (tylko dla niepustych wskaźników) za pomocą: operatorów dereferencji i selekcji (* i.): (*pointer).member operatora dereferencji wskaźnikowej (->): pointer->member class Student { string name; int index; public: Student(string _name); int getname() const; //inne metody }; Student* p = new Student( Scott Tiger ); //alokacja struktury cout << (*p).getname(); //operatory dereferencji i selekcji cout << p->getname(); //operator dereferencji wskaźnikowej delete p; //dealokacja struktury 4/4747

5 Wska ź nik this wskaźnik do obiektu, dla którego została wywołana metoda (dostępny w każdej metodzie struktury/klasy) class Vector { double* v; int dim; public: Vector(int dim) { v = new double[this->dim = dim]; } Vector& operator=(const Vector&); }; Vector& Vector::operator=(const Vector &r) { if(this!= &r) { //sprawdzenie adresów obiektów delete[] v; v = new double[dim = r.dim]; for(int i = 0; i < dim; i++) v[i] = r.v[i]; } return *this; //dereferencja wskaźnika zwraca obiekt } 5/47

6 ezpiecze ń stwo wska ź ników dereferencja wskaźnika możliwa tylko gdy wskaźnik nie jest pusty (warunkowe użycie dereferencji, pustość wskaźnika oznacza najczęściej przypadek szczególny w algorytmie) nazwa wskaźnika powinna jednoznacznie określać jego zastosowanie (proste wnioskowanie w przypadku pustości wskaźnika) powoływanie dedykowanych wskaźników dla alokacji i dealokacji pamięci 4 kroki poprawnej dealokacji pamięci (zapobieganie powstawania wskaźników wiszących): (1) powołanie wskaźnika i przypisanie mu adresu obiektu do zwolnienia (2) opcjonalne zabezepieczenie ważnych danych z obiektu (3) odpięcie (modyfikacja) wszystkich wskaźników przechowujących adres obiektu (poza wskaźnikiem z kroku pierwszego) (4) zwolnienie obiektu za pomocą jedynego możliwego wskaźnika 6/47

7 Lista łą czona pozwala na nieciągły przydział pamięci przy implementacji DT złożona z węzłów połączonych wskaźnikami - każdy węzeł zawiera dane i adres następnego (lista jednokierunkowa) oraz poprzedniego (lista dwukierunkowa) zalety: wysoka skalowalność i rozszerzalność, optymalne zużycie pamięci, łatwe dodawanie i usuwanie danych bez konieczności zmiany położenia w pamięci pozostałych danych wady: implementacja (operacje na wskaźnikach), niska wydajność odczytu (brak dostępu bezpośredniego do dowolnego elementu), dodatkowa pamięć wymagana dla zapamiętania adresów węzłów 7/47

8 Implementacja listowa DT pozwala na nieograniczony rozmiar struktury wskaźnik na pierwszy (opcjonanie również ostatni) węzeł listy łączonej główne metody: konstruktor bezparametrowy (puste wskaźniki, brak węzłów) destruktor (zwolnienie pamięci wszystkich węzłów) konstruktor kopiujący (przydział pamięci dla węzłów) operator przypisania (zwolnienie starej i przydział nowej pamięci dla węzłów) dodawanie elementu (przydział pamięci dla nowego węzła) usuwanie elementu (zwolnienie pamięci węzła) 8/47

9 Wstawianie na pocz ą tek (1) tworzymy nowy węzeł (creator) z podaną wartością i adresem pierwszego węzła () jako adresem następnego () 9/47

10 Wstawianie na pocz ą tek (1) tworzymy nowy węzeł (creator) z podaną wartością i adresem pierwszego węzła () jako adresem następnego () creator V 10/47

11 Wstawianie na pocz ą tek (1) tworzymy nowy węzeł (creator) z podaną wartością i adresem pierwszego węzła () jako adresem następnego () (2) przestawiamy wskaźnik pierwszego węzła () na nowy węzeł (3) jeżeli jest wskaźnik na ostatni węzeł (tail) i wskazuje on na pusty adres, ustawiamy go na nowy węzeł creator V 11/47

12 Wstawianie na pocz ą tek (1) tworzymy nowy węzeł (creator) z podaną wartością i adresem pierwszego węzła () jako adresem następnego () (2) przestawiamy wskaźnik pierwszego węzła () na nowy węzeł (3) jeżeli jest wskaźnik na ostatni węzeł (tail) i wskazuje on na pusty adres, ustawiamy go na nowy węzeł creator V 12/47

13 Wstawianie na pocz ą tek (1) tworzymy nowy węzeł (creator) z podaną wartością i adresem pierwszego węzła () jako adresem następnego () (2) przestawiamy wskaźnik pierwszego węzła () na nowy węzeł (3) jeżeli jest wskaźnik na ostatni węzeł (tail) i wskazuje on na pusty adres, ustawiamy go na nowy węzeł V 13/47

14 Usuwanie na pocz ą tku (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) ustawiamy dedykowany wskaźnik (killer) na pierwszy węzeł 14/47 47

15 Usuwanie na pocz ą tku (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) ustawiamy dedykowany wskaźnik (killer) na pierwszy węzeł killer 15/47

16 Usuwanie na pocz ą tku (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) ustawiamy dedykowany wskaźnik (killer) na pierwszy węzeł (3) przestawiamy wskaźnik pierwszego węzła () na węzeł drugi (używając adresu zapisanego we wskaźniku z pierwszego węzła) (4) jeżeli jest wskaźnik na ostatni węzeł (tail) i wskazuje on na usuwany, ustawiamy go na pusty adres killer 16/47

17 Usuwanie na pocz ą tku (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) ustawiamy dedykowany wskaźnik (killer) na pierwszy węzeł (3) przestawiamy wskaźnik pierwszego węzła () na węzeł drugi (używając adresu zapisanego we wskaźniku z pierwszego węzła) (4) jeżeli jest wskaźnik na ostatni węzeł (tail) i wskazuje on na usuwany, ustawiamy go na pusty adres killer 17/47

18 Usuwanie na pocz ą tku (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) ustawiamy dedykowany wskaźnik (killer) na pierwszy węzeł (3) przestawiamy wskaźnik pierwszego węzła () na węzeł drugi (używając adresu zapisanego we wskaźniku z pierwszego węzła) (4) jeżeli jest wskaźnik na ostatni węzeł (tail) i wskazuje on na usuwany, ustawiamy go na pusty adres (5) zwalniamy węzeł wskazywany przez wskaźnik dedykowany (killer) killer 18/47

19 Usuwanie na pocz ą tku (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) ustawiamy dedykowany wskaźnik (killer) na pierwszy węzeł (3) przestawiamy wskaźnik pierwszego węzła () na węzeł drugi (używając adresu zapisanego we wskaźniku z pierwszego węzła) (4) jeżeli jest wskaźnik na ostatni węzeł (tail) i wskazuje on na usuwany, ustawiamy go na pusty adres (5) zwalniamy węzeł wskazywany przez wskaźnik dedykowany (killer) killer 19/47

20 Usuwanie na pocz ą tku (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) ustawiamy dedykowany wskaźnik (killer) na pierwszy węzeł (3) przestawiamy wskaźnik pierwszego węzła () na węzeł drugi (używając adresu zapisanego we wskaźniku z pierwszego węzła) (4) jeżeli jest wskaźnik na ostatni węzeł (tail) i wskazuje on na usuwany, ustawiamy go na pusty adres (5) zwalniamy węzeł wskazywany przez wskaźnik dedykowany (killer) 20/47

21 Wstawianie na koniec (wer. 1) wersja ze wskaźnikiem na pierwszy węzeł (): (1) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do ostatniego węzła 21/47

22 Wstawianie na koniec (wer. 1) wersja ze wskaźnikiem na pierwszy węzeł (): (1) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do ostatniego węzła tmp 22/47

23 Wstawianie na koniec (wer. 1) wersja ze wskaźnikiem na pierwszy węzeł (): (1) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do ostatniego węzła tmp 23/47

24 Wstawianie na koniec (wer. 1) wersja ze wskaźnikiem na pierwszy węzeł (): (1) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do ostatniego węzła (2) tworzymy nowy węzeł (creator) z podaną wartością i wartością pustą jako adresem następnego () tmp 24/47 47

25 Wstawianie na koniec (wer. 1) wersja ze wskaźnikiem na pierwszy węzeł (): (1) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do ostatniego węzła (2) tworzymy nowy węzeł (creator) z podaną wartością i wartością pustą jako adresem następnego () V tmp creator 25/47

26 Wstawianie na koniec (wer. 1) wersja ze wskaźnikiem na pierwszy węzeł (): (1) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do ostatniego węzła (2) tworzymy nowy węzeł (creator) z podaną wartością i wartością pustą jako adresem następnego () (3) przestawiamy wskaźnik w węźle wskazywanym przez tmp (lub wskaźnik gdy tmp jest pusty) na nowy węzeł V tmp creator 26/47

27 Wstawianie na koniec (wer. 1) wersja ze wskaźnikiem na pierwszy węzeł (): (1) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do ostatniego węzła (2) tworzymy nowy węzeł (creator) z podaną wartością i wartością pustą jako adresem następnego () (3) przestawiamy wskaźnik w węźle wskazywanym przez tmp (lub wskaźnik gdy tmp jest pusty) na nowy węzeł V tmp creator 27/47

28 Wstawianie na koniec (wer. 1) wersja ze wskaźnikiem na pierwszy węzeł (): (1) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do ostatniego węzła (2) tworzymy nowy węzeł (creator) z podaną wartością i wartością pustą jako adresem następnego () (3) przestawiamy wskaźnik w węźle wskazywanym przez tmp (lub wskaźnik gdy tmp jest pusty) na nowy węzeł V 28/47

29 Wstawianie na koniec (wer. 2) wersja ze wskaźnikami na pierwszy i ostatni węzeł ( i tail): (1) tworzymy nowy węzeł (creator) z podaną wartością i wartością pustą jako adresem następnego () tail 29/47

30 Wstawianie na koniec (wer. 2) wersja ze wskaźnikami na pierwszy i ostatni węzeł ( i tail): (1) tworzymy nowy węzeł (creator) z podaną wartością i wartością pustą jako adresem następnego () V tail creator 30/47

31 Wstawianie na koniec (wer. 2) wersja ze wskaźnikami na pierwszy i ostatni węzeł ( i tail): (1) tworzymy nowy węzeł (creator) z podaną wartością i wartością pustą jako adresem następnego () (2) przestawiamy wskaźnik w ostatnim węźle wskazywanym przez tail (lub wskaźnik gdy tail jest pusty) na nowy węzeł V tail creator 31/47

32 Wstawianie na koniec (wer. 2) wersja ze wskaźnikami na pierwszy i ostatni węzeł ( i tail): (1) tworzymy nowy węzeł (creator) z podaną wartością i wartością pustą jako adresem następnego () (2) przestawiamy wskaźnik w ostatnim węźle wskazywanym przez tail (lub wskaźnik gdy tail jest pusty) na nowy węzeł tail V creator 32/47

33 Wstawianie na koniec (wer. 2) wersja ze wskaźnikami na pierwszy i ostatni węzeł ( i tail): (1) tworzymy nowy węzeł (creator) z podaną wartością i wartością pustą jako adresem następnego () (2) przestawiamy wskaźnik w ostatnim węźle wskazywanym przez tail (lub wskaźnik gdy tail jest pusty) na nowy węzeł (3) przestawiamy wskaźnik tail na nowy węzeł tail V creator 33/47

34 Wstawianie na koniec (wer. 2) wersja ze wskaźnikami na pierwszy i ostatni węzeł ( i tail): (1) tworzymy nowy węzeł (creator) z podaną wartością i wartością pustą jako adresem następnego () (2) przestawiamy wskaźnik w ostatnim węźle wskazywanym przez tail (lub wskaźnik gdy tail jest pusty) na nowy węzeł (3) przestawiamy wskaźnik tail na nowy węzeł tail V creator 34/47 47

35 Wstawianie na koniec (wer. 2) wersja ze wskaźnikami na pierwszy i ostatni węzeł ( i tail): (1) tworzymy nowy węzeł (creator) z podaną wartością i wartością pustą jako adresem następnego () (2) przestawiamy wskaźnik w ostatnim węźle wskazywanym przez tail (lub wskaźnik gdy tail jest pusty) na nowy węzeł (3) przestawiamy wskaźnik tail na nowy węzeł tail V 35/47

36 Usuwanie na ko ń cu (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację tail 36/47

37 Usuwanie na ko ń cu (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do przedostatniego węzła (ostatniego węzła, którego wskaźnik jest niepusty) tmp tail 37/47

38 Usuwanie na ko ń cu (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do przedostatniego węzła (ostatniego węzła, którego wskaźnik jest niepusty) tmp tail 38/47

39 Usuwanie na ko ń cu (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do przedostatniego węzła (ostatniego węzła, którego wskaźnik jest niepusty) (3) ustawiamy dedykowany wskaźnik (killer) na ostatni węzeł używając adresu zapisanego we wskaźniku węzła wskazywanego przez tmp (lub wskaźnika jeżeli tmp jest pusty, lub wskaźnika tail jeżeli istnieje) tmp tail 39/47

40 Usuwanie na ko ń cu (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do przedostatniego węzła (ostatniego węzła, którego wskaźnik jest niepusty) (3) ustawiamy dedykowany wskaźnik (killer) na ostatni węzeł używając adresu zapisanego we wskaźniku węzła wskazywanego przez tmp (lub wskaźnika jeżeli tmp jest pusty, lub wskaźnika tail jeżeli istnieje) tmp tail killer 40/47 47

41 Usuwanie na ko ń cu (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do przedostatniego węzła (ostatniego węzła, którego wskaźnik jest niepusty) (3) ustawiamy dedykowany wskaźnik (killer) na ostatni węzeł używając adresu zapisanego we wskaźniku węzła wskazywanego przez tmp (lub wskaźnika jeżeli tmp jest pusty, lub wskaźnika tail jeżeli istnieje) (4) ustawiamy wskaźnik węzła wskazywanego przez tmp (lub wskaźnik gdy tmp jest pusty) na pusty adres tmp tail killer 41/47 47

42 Usuwanie na ko ń cu (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do przedostatniego węzła (ostatniego węzła, którego wskaźnik jest niepusty) (3) ustawiamy dedykowany wskaźnik (killer) na ostatni węzeł używając adresu zapisanego we wskaźniku węzła wskazywanego przez tmp (lub wskaźnika jeżeli tmp jest pusty, lub wskaźnika tail jeżeli istnieje) (4) ustawiamy wskaźnik węzła wskazywanego przez tmp (lub wskaźnik gdy tmp jest pusty) na pusty adres tmp tail killer 42/47 47

43 Usuwanie na ko ń cu (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do przedostatniego węzła (ostatniego węzła, którego wskaźnik jest niepusty) (3) ustawiamy dedykowany wskaźnik (killer) na ostatni węzeł używając adresu zapisanego we wskaźniku węzła wskazywanego przez tmp (lub wskaźnika jeżeli tmp jest pusty, lub wskaźnika tail jeżeli istnieje) (4) ustawiamy wskaźnik węzła wskazywanego przez tmp (lub wskaźnik gdy tmp jest pusty) na pusty adres (5) jeżeli jest wskaźnik na ostatni węzeł (tail), ustawiamy go na tmp tmp tail killer 43/47 47

44 Usuwanie na ko ń cu (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do przedostatniego węzła (ostatniego węzła, którego wskaźnik jest niepusty) (3) ustawiamy dedykowany wskaźnik (killer) na ostatni węzeł używając adresu zapisanego we wskaźniku węzła wskazywanego przez tmp (lub wskaźnika jeżeli tmp jest pusty, lub wskaźnika tail jeżeli istnieje) (4) ustawiamy wskaźnik węzła wskazywanego przez tmp (lub wskaźnik gdy tmp jest pusty) na pusty adres (5) jeżeli jest wskaźnik na ostatni węzeł (tail), ustawiamy go na tmp tmp tail killer 44/47 47

45 Usuwanie na ko ń cu (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do przedostatniego węzła (ostatniego węzła, którego wskaźnik jest niepusty) (3) ustawiamy dedykowany wskaźnik (killer) na ostatni węzeł używając adresu zapisanego we wskaźniku węzła wskazywanego przez tmp (lub wskaźnika jeżeli tmp jest pusty, lub wskaźnika tail jeżeli istnieje) (4) ustawiamy wskaźnik węzła wskazywanego przez tmp (lub wskaźnik gdy tmp jest pusty) na pusty adres (5) jeżeli jest wskaźnik na ostatni węzeł (tail), ustawiamy go na tmp (6) zwalniamy węzeł wskazywany przez wskaźnik dedykowany (killer) tmp killer tail 45/47 47

46 Usuwanie na ko ń cu (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do przedostatniego węzła (ostatniego węzła, którego wskaźnik jest niepusty) (3) ustawiamy dedykowany wskaźnik (killer) na ostatni węzeł używając adresu zapisanego we wskaźniku węzła wskazywanego przez tmp (lub wskaźnika jeżeli tmp jest pusty, lub wskaźnika tail jeżeli istnieje) (4) ustawiamy wskaźnik węzła wskazywanego przez tmp (lub wskaźnik gdy tmp jest pusty) na pusty adres (5) jeżeli jest wskaźnik na ostatni węzeł (tail), ustawiamy go na tmp (6) zwalniamy węzeł wskazywany przez wskaźnik dedykowany (killer) tmp killer tail 46/47 47

47 Usuwanie na ko ń cu (1) jeżeli lista jest pusta zgłaszamy wyjątek i przerywamy operację (2) przechodzimy wskaźnikiem pomocniczym (tmp) od początku listy do przedostatniego węzła (ostatniego węzła, którego wskaźnik jest niepusty) (3) ustawiamy dedykowany wskaźnik (killer) na ostatni węzeł używając adresu zapisanego we wskaźniku węzła wskazywanego przez tmp (lub wskaźnika jeżeli tmp jest pusty, lub wskaźnika tail jeżeli istnieje) (4) ustawiamy wskaźnik węzła wskazywanego przez tmp (lub wskaźnik gdy tmp jest pusty) na pusty adres (5) jeżeli jest wskaźnik na ostatni węzeł (tail), ustawiamy go na tmp (6) zwalniamy węzeł wskazywany przez wskaźnik dedykowany (killer) tail 47/47

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium:

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium: Laboratorium nr 9 Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium: wskaźniki referencje zastosowanie wskaźników wobec tablic dynamiczny przydział pamięci,

Bardziej szczegółowo

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW

ZASADY PROGRAMOWANIA KOMPUTERÓW POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.

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

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,

Bardziej szczegółowo

Programowanie w języku C++

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

Bardziej szczegółowo

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe Algorytmy i złożoności Wykład 3. Listy jednokierunkowe Wstęp. Lista jednokierunkowa jest strukturą pozwalającą na pamiętanie danych w postaci uporzadkowanej, a także na bardzo szybkie wstawianie i usuwanie

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

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.) Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.) Kontenery - - wektor vector - - lista list - - kolejka queue - - stos stack Kontener asocjacyjny map 2016-01-08 Bazy danych-1 W5 1 Kontenery W programowaniu

Bardziej szczegółowo

DYNAMICZNE PRZYDZIELANIE PAMIECI

DYNAMICZNE PRZYDZIELANIE PAMIECI DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne

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

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

Wykład 8: klasy cz. 4

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

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

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 22 XI 2011 Uwaga! Ponieważ już sobie powiedzieliśmy np. o wskaźnikach i referencjach, przez które nie chcemy przegrzebywać

Bardziej szczegółowo

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

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Przydzielanie pamięci Poniżej przedstawiono w C++ dwie klasy obrazujące sposób rezerwacji pamięci. class Osoba char imie[30];

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

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Celem ćwiczenia jest zapoznanie studentów z najprostszą dynamiczną strukturą

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom). Zarządzanie pamięcią Pamięć: stos i sterta Statyczny i dynamiczny przydział pamięci Funkcje ANSI C do zarządzania pamięcią Przykłady: Dynamiczna tablica jednowymiarowa Dynamiczna tablica dwuwymiarowa 154

Bardziej szczegółowo

Podstawy programowania obiektowego

Podstawy programowania obiektowego Podstawy programowania obiektowego Technologie internetowe Wykład 5 Program wykładu Podejście obiektowe kontra strukturalne do tworzenie programu Pojęcie klasy i obiektu Składowe klasy: pola i metody Tworzenie

Bardziej szczegółowo

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU Konstrukcja obiektów Niszczenie obiektów i zwalnianie zasobów

Bardziej szczegółowo

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

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&

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

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Wykład 9 - powtórzenie. 11 maja 2007 Powtórzenie materiału obiekty automatyczne, statyczne, tymczasowe, dynamiczne dziedziczenie, agregacja polimorfizm, funkcje wirtualne wzorce projektowe (strukturalne,

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

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

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017 > C++ wskaźniki Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017 >??? Co to jest WSKAŹNIK? ++ wskaźniki 2 / 20 >??? Co to jest WSKAŹNIK? To po prostu ADRES

Bardziej szczegółowo

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory Dzisiejszy wykład Klasa string wersja prosta wersja ze zliczaniem odwołań Wyjątki Specyfikator volatile Semafory 1 Klasa string Przetwarzanie tekstów jest powszechną dziedziną zastosowań komputerów W języku

Bardziej szczegółowo

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy Wykład 4 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Tablice Wskaźniki Adresy pamięci Operator adresu

Bardziej szczegółowo

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

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory. Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory. Konstruktory Konstruktory w językach obiektowych są to specjalne metody wywoływane podczas tworzenia nowego obiektu i służące do

Bardziej szczegółowo

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

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 12 Katarzyna Grzelak 28 maja 2018 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Klasy cd K.Grzelak (Wykład 12) Programowanie w C++ 2 / 27 Klasy - powtórzenie Klasy typy definiowane

Bardziej szczegółowo

Lab 9 Podstawy Programowania

Lab 9 Podstawy Programowania Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany

Bardziej szczegółowo

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

Programowanie 2. Język C++. Wykład 3. 3.1 Programowanie zorientowane obiektowo... 1 3.2 Unie... 2 3.3 Struktury... 3 3.4 Klasy... 4 3.5 Elementy klasy... 5 3.6 Dostęp do elementów klasy... 7 3.7 Wskaźnik this... 10 3.1 Programowanie zorientowane

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

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy) Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny: Wskaźniki nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny: typ nw; /* definicja zmiennej nw typu typ */ typ *w_nw; /* definicja

Bardziej szczegółowo

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 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Programowanie w C++ Wykład 11 Katarzyna Grzelak 13 maja 2019 K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Klasy cd K.Grzelak (Wykład 11) Programowanie w C++ 2 / 30 Klasy - powtórzenie Klasy typy definiowane

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

Programowanie i struktury danych

Programowanie i struktury danych Programowanie i struktury danych 1 / 19 Dynamiczne struktury danych Dynamiczną strukturą danych nazywamy taka strukturę danych, której rozmiar, a więc liczba przechowywanych w niej danych, może się dowolnie

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

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ą

Bardziej szczegółowo

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami: Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie

Bardziej szczegółowo

Tbli Tablice obiektów biktó są tworzone dokładnie d tak samo, jak i tablice, składające się z elementów innego typu

Tbli Tablice obiektów biktó są tworzone dokładnie d tak samo, jak i tablice, składające się z elementów innego typu Tablice, wskaźniki, referencje Tbli Tablice obiektów biktó są tworzone dokładnie d tak samo, jak i tablice, składające się z elementów innego typu #include using namespace std; class cl int

Bardziej szczegółowo

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki Typy wyliczeniowe Konwersje napis liczba Struktury, unie Scanf / printf Wskaźniki Typy wyliczeniowe Służą do łatwiejszej kontroli nad stałymi Ustawianie parametrów o ściśle określonym zbiorze wartości

Bardziej szczegółowo

Programowanie Obiektowe i C++

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!

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 5 Katarzyna Grzelak 16 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły

Bardziej szczegółowo

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

Zaawansowane programowanie w języku C++ Klasy w C++ Zaawansowane programowanie w języku C++ Klasy w C++ Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń

Bardziej szczegółowo

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

// Liczy srednie w wierszach i kolumnach tablicy dwuwymiarowej // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib. Wykład 10 Przykłady różnych funkcji (cd) - przetwarzanie tablicy tablic (tablicy "dwuwymiarowej") - sortowanie przez "selekcję" Dynamiczna alokacja pamięci 1 // Liczy srednie w wierszach i kolumnach tablicy

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

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

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

Dynamiczne struktury danych

Dynamiczne struktury danych Dynamiczne struktury danych 391 Dynamiczne struktury danych Przez dynamiczne struktury danych rozumiemy proste i złożone struktury danych, którym pamięć jest przydzielana i zwalniana na żądanie w trakcie

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz:

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy PRAWA PRZYJACIÓŁ KLASY. Dostęp z zewnątrz: Dostęp z wewnątrz: Prawa dostępu do składowych klasy PRAWA PRZYJACIÓŁ KLASY 91 Dostęp z zewnątrz: double limit; ; water_temp T; T.limit = 100; Dostęp z wewnątrz: double set_temp(double nt) { if (nt0) ; water_temp

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 5

Programowanie komputerowe. Zajęcia 5 Programowanie komputerowe Zajęcia 5 Tablice wielowymiarowe Tablicę dwuwymiarową możemy deklarować statycznie: typ nazwa[rozmiar1][rozmiar2]; Ma ona elementy nazwa[i][j] dla i=0,,rozmiar1-1, j=0,...,rozmiar2-1.

Bardziej szczegółowo

Wykład 1: Wskaźniki i zmienne dynamiczne

Wykład 1: Wskaźniki i zmienne dynamiczne Programowanie obiektowe Wykład 1: Wskaźniki i zmienne dynamiczne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD Podstawy programowania w C++ Wskaźniki 2 dr Artur Bartoszewski - Programowanie

Bardziej szczegółowo

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje Podstawy informatyki Informatyka stosowana - studia niestacjonarne - Zajęcia nr 4 Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w

Bardziej szczegółowo

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Zajęcia nr 5 Algorytmy i wskaźniki dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Plan Zapis i odczyt z plików tekstowych O tablicach ciąg dalszy Referencje

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 4

Programowanie komputerowe. Zajęcia 4 Programowanie komputerowe Zajęcia 4 Typ logiczny Wartości logiczne są reprezentowane przez typ bool. Typ bool posiada tylko dwie wartości: true i false. Zamiast wartości logicznych można używać wartości

Bardziej szczegółowo

Programowanie obiektowe

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;

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część dziewiąta Autor Roman Simiński Kontakt 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

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

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

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

Listy powiązane zorientowane obiektowo

Listy powiązane zorientowane obiektowo Listy powiązane zorientowane obiektowo Aby zilustrować potęgę polimorfizmu, przeanalizujmy zorientowaną obiektowo listę powiązaną. Jak zapewne wiesz, lista powiązana jest strukturą danych, zaprojektowaną

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo

Języki i techniki programowania Ćwiczenia 2

Języki i techniki programowania Ćwiczenia 2 Języki i techniki programowania Ćwiczenia 2 Autor: Marcin Orchel Spis treści: Język C++... 5 Przekazywanie parametrów do funkcji... 5 Przekazywanie parametrów w Javie.... 5 Przekazywanie parametrów w c++...

Bardziej szczegółowo

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

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem. Podstawy programowania Wykład PASCAL Zmienne wskaźnikowe i dynamiczne 1 dr Artur Bartoszewski - Podstawy prograowania, sem. 1- WYKŁAD Rodzaje zmiennych Zmienne dzielą się na statyczne i dynamiczne. Zmienna

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy KONSTRUKTORY

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy KONSTRUKTORY Inicjalizacja obiektu KONSTRUKTORY Inicjalizacja Przyczyną wielu błędów w programach jest nieprawidłowe zainicjalizowanie zmiennych na początku działania programu. Obiekt zawiera z reguły szereg pól ich

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

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, rok

Bardziej szczegółowo

Języki i metodyka programowania. Wskaźniki i tablice.

Języki i metodyka programowania. Wskaźniki i tablice. Wskaźniki i tablice. Zmienna1 Zmienna2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Zmienna to fragment pamięci o określonym rozmiarze identyfikowany za pomocą nazwy, w którym może być przechowywana

Bardziej szczegółowo

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster Wykład nr 3 Temat: Wskaźniki i referencje. Cytaty: Mylić się jest rzeczą ludzką, ale żeby coś naprawdę spaprać potrzeba komputera. Edward Morgan Forster Gdyby murarze budowali domy tak, jak programiści

Bardziej szczegółowo

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce. Przygotować program tworzący tablicę dwuwymiarową zawierającą zestawy 10 2, 10 4, 10 6 liczb losowych zmiennoprzecinkowych. Korzystając z funkcji bibliotecznych uporządkować zawartość każdego (a) wiersza

Bardziej szczegółowo

STL: Lekcja 1&2. Filozofia STL

STL: Lekcja 1&2. Filozofia STL STL: Lekcja 1&2 Tematy: Filozofia STL Po co nam STL? Podstawowa zawartość STL Co warto znać zanim zaczniemy pracę z STL?: wskaźniki Praca na tekstach: klasa String Vector: nowy wymiar standardowych tablic.

Bardziej szczegółowo

Zmienne i struktury dynamiczne

Zmienne i struktury dynamiczne Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest

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

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje Zbudujemy klasę Definicję klasy zapiszmy w pliku tstring.h #ifndef TSTRING_H #define TSTRING_H #include // w pliku nagłówkowym NIE // otwieramy przestrzeni std // interfejs private: // implementacja

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

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych

Bardziej szczegółowo

Dokumentacja do API Javy.

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

Bardziej szczegółowo

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 6 Wskaźniki Krzysztof Banaś Podstawy programowania 1 Adresy zmiennych Język C pozwala na operowanie adresami w pamięci stąd, między innymi, kwalifikowanie C jako języka relatywnie

Bardziej szczegółowo

Paradygmaty programowania. Paradygmaty programowania

Paradygmaty programowania. Paradygmaty programowania Paradygmaty programowania Paradygmaty programowania Dr inż. Andrzej Grosser Cz estochowa, 2013 2 Spis treści 1. Zadanie 2 5 1.1. Wprowadzenie.................................. 5 1.2. Wskazówki do zadania..............................

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część ósma Zmienne wskaźnikowe koncepcja, podstawowe zastosowania Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo

Nowoczesny C++ Rafał Wasilewski 1

Nowoczesny C++ Rafał Wasilewski 1 Nowoczesny C++ Rafał Wasilewski 1 1 Wydział Inżynierii Mechanicznej i Informatyki Kierunek informatyka, Rok III Politechnika Częstochowska {wasilewski.rafael@gmail.com 1 Wstęp Streszczenie Tematem pracy

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

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 8 Przykład realizowany na wykładzie Klasy StringBad i String. Wstępne pliki załaczone jako źródła.

Bardziej szczegółowo

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to

Bardziej szczegółowo

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

Bardziej szczegółowo

Wykład 5: Klasy cz. 3

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

Bardziej szczegółowo

Język C++ wykład VIII

Język C++ wykład VIII 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

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Programowanie w C++ Wykład 5 Katarzyna Grzelak 26 marca 2018 9 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Pojęcia z poprzedniego wykładu Podział programu na funkcje podział na niezależne

Bardziej szczegółowo

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Inicjalizacja agregatowa zmiennej tablicowej int a[5] = 1,2,3,4,5 INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Struktury są również agregatami, dlatego: struct X double f; char c; X x1 = 1, 2.2, 'c' Ale

Bardziej szczegółowo

Wskaźniki. Programowanie Proceduralne 1

Wskaźniki. Programowanie Proceduralne 1 Wskaźniki Programowanie Proceduralne 1 Adresy zmiennych Sterta 1 #include 2 3 int a = 2 ; 4 5 int main ( ) 6 { 7 int b = 3 ; 8 9 printf ( " adres zmiennej a %p\n", &a ) ; 10 printf ( " adres

Bardziej szczegółowo

Referencje do zmiennych i obiektów

Referencje do zmiennych i obiektów Referencje do zmiennych i obiektów 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

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