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

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

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:

Techniki Programowania wskaźniki

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

W dowolnym momencie można zmienić typ wskaźnika.

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

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

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

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

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

Lab 9 Podstawy Programowania

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

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

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

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

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Wykład 1: Wskaźniki i zmienne dynamiczne

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

Podstawy programowania skrót z wykładów:

Wykład 5: Klasy cz. 3

Język C++ zajęcia nr 2

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

Wskaźniki. Informatyka

Referencje do zmiennych i obiektów

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

ZASADY PROGRAMOWANIA KOMPUTERÓW

Zmienne, stałe i operatory

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

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

Techniki Programowania wskaźniki 2

Wstęp do programowania

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Wykład 4: Klasy i Metody

Podstawy Programowania Obiektowego

Podstawy programowania w języku C++

Wykład 8: klasy cz. 4

Języki i metodyka programowania. Wprowadzenie do języka C

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

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

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Programowanie - wykład 4

DYNAMICZNE PRZYDZIELANIE PAMIECI

Język C++ Różnice między C a C++

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Wskaznik. Przekazywanie wyniku funkcji przez return. Typy i zmienne wskaznikowe. Zmienna wskazywana. typ * nazwa_wkaznika

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

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

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Tablice (jedno i wielowymiarowe), łańcuchy znaków

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Wstęp do programowania

C-struktury wykład. Dorota Pylak

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

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 1. Wprowadzenie, środowisko programistyczne, pierwsze programy

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

Część 4 życie programu

Przekazywanie argumentów wskaźniki

tablica: dane_liczbowe

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

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

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

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

Wstęp do wskaźników w języku ANSI C

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

Podstawy Programowania C++

Programowanie w języku C++

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM

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

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

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

Rozdział 4 KLASY, OBIEKTY, METODY

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

Laboratorium nr 10. Temat: Funkcje cz.2.

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

Wstęp do informatyki- wykład 11 Funkcje

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Argumenty wywołania programu, operacje na plikach

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

Program 6. Program wykorzystujący strukturę osoba o polach: imię, nazwisko, wiek. W programie wykorzystane są dwie funkcje:

1 Podstawy c++ w pigułce.

Podstawy programowania w języku C++

Pytania sprawdzające wiedzę z programowania C++

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

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

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

1 Podstawy c++ w pigułce.

KURS C/C++ WYKŁAD 6. Wskaźniki

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

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

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

Języki i techniki programowania Ćwiczenia 2

Wskaźniki w C. Anna Gogolińska

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Transkrypt:

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 po zakończeniu działania tej funkcji i zachowuje swą wartość. Przy ponownym wejściu do tej samej funkcji, zmienna ta ma taką wartość, jaką miała przy ostatnim wyjściu z tej funkcji, np.: 2

ZAKRES WAŻNOŚCI I CZAS ŻYCIA Zakres ważności nazwy obiektu: Część programu, w której obiekt jest dostępny (nazwa jest znana). Czas życia obiektu: Okres od zdefiniowania obiektu (przydział pamięci) do momentu, gdy obiekt przestaje istnieć (zwolnienie pamięci). Dany obiekt może istnieć, lecz nie być dostępny (gdy jesteśmy poza zakresem ważności jego nazwy). Zakres globalny: Nazwa zadeklarowana na zewnątrz wszystkich funkcji ma zasięg globalny - jest znana od momentu deklaracji do końca pliku. 3

ZAKRES WAŻNOŚCI I CZAS ŻYCIA Zakres lokalny: Zakres ograniczony dwoma klamrami (zakres bloku), np.: int main() { // jakies obliczenia { int x; //definiujemy zmienną x... //możemy z x korzystać } }... //tu juz x nie jest dostepne... return 0; Zakres bloku funkcji (main lub innej): for (int i=0; i<10; ++i) { cout<<i+1 <<" "; // } Zakres ten ma etykieta jest znana nawet w linijkach poprzedzających tą etykietę. Dla przypomnienia: etykieta to nazwa zakończona dwukropkiem; można się do niej odwołać instrukcją goto. Zakres obszaru klasy: Przy omawianiu klas 4

ZASŁANIANIE NAZW Zasłanianie nazw zmiennych: o o o W programie można zdefiniować zmienną lokalną o takiej samej nazwie, jak zmienna globalna. Tak zdefiniowana zmienna lokalna zasłania (w danym lokalnym zakresie) zmienną globalną odwołanie do zmiennej to odwołanie do zmiennej lokalnej. Do zmiennej globalnej można się odwołać stosując operator zakresu ::, np.: 5

PRZESTRZENIE NAZW Przestrzenie (obszary) nazw: o o o o Nazwany zbiór symboli (np. zmiennych, funkcji). Zostały wprowadzone w celu uniknięcia konfliktów nazw np. w dużych projektach, nad którymi pracuje więcej, niż 1 jedna osoba. Symbole są zamykane w pewnych zakresach (tworzonych za pomocą słowa kluczowego namespace). Sposób wywołania nazwy z danej przestrzeni: PrzestrzenNazw::nazwa; o o Wszystkie elementy biblioteki standardowej języka C++ należą do przestrzeni nazw std. Umieszczenie przed funkcją main()deklaracji using namespace std; powoduje, że nazwy z biblioteki standardowej mogą być pisane bez przedrostka std::. 6

PRZESTRZENIE NAZW Przykład: 7

WSKAŹNIKI Zmienna to konstrukcja programistyczna posiadająca trzy podstawowe atrybuty: 1. symboliczną nazwę (identyfikator); 2. miejsce przechowywania (adres i długość danych); 3. wartość; oraz (zwykle): 4. typ (określający rodzaj danych przechowywanych w zmiennej). Wskaźnik to obiekt (zmienna typu wskaźnikowego), która przechowuje adres innego obiektu (zmiennej). Po co? o przyspieszenie operacji tablicowych; o funkcje mogą zmieniać wartość przesyłanych do nich argumentów; o dynamiczny przydział pamięci (tablice dynamiczne); o dostęp do specjalnych komórek pamięci. 8

WSKAŹNIKI Na co mogą pokazywać wskaźniki (czyli czego adres przechowywać)? - na zmienne różnych typów; - na tablice i ich elementy; - na inne obiekty. Przykłady definicji wskaźników: int *wskaz1; //wskaźnik o nazwie wskaz1 do pokazywania na obiekty typu int float * wskaz2[5]; //5-elementowa tablica wskaźników do pokazywania na obiekty typu float Zwierze * wsk; //wskaźnik do pokazywania na obiekty klasy Zwierze o Przed użyciem wskaźnika należy go przypisać do konkretnego obiektu (przypisać mu adres tego obiektu). 9

WSKAŹNIKI Przykład: 10

WTRĄCENIE......na temat liczb całkowitych Domyślnie liczby zapisywane są w systemie dziesiętnym: int l_dzies=234; Jeśli chcemy stosować system ósemkowy (oktalny) zaczynamy zerem: int l_okt=0352; przeliczając: 0352=2*8 0 +5*8 1 +3*8 2 =2+40+192=234 Jeśli chcemy stosować system szesnastkowy (heksadecymalny) zaczynamy od 0x: int l_hex=0xea; przeliczając: 0xEA=10*16 0 +14*16 1 =10+224=234 zero 11

WSKAŹNIKI o Wskaźnik można przestawić tak, by pokazywał na inny obiekt tego samego typu. o Za pomocą wskaźnika można zmodyfikować zawartość obiektu, na który ten wskaźnik pokazuje. 12

WSKAŹNIKI Do każdego wskaźnika można podstawić adres 0 ( zwany też tradycyjnie NULL), np.: lub wsk=0; wsk=null; Ustawienie wskaźnika na ten adres powoduje, że wskaźnik nie pokazuje na nic sensownego (co czasem jest pożądane, by żadnego obiektu przypadkiem nie zmodyfikować). Można np. korzystać z instrukcji warunkowej: if(wsk==0) cout<< Wskaznik nie jest ustawiony!"<<endl; //Pamiętaj: == else { } //jeśli wskaźnik pokazuje na cos sensownego... // jakieś instrukcje 13

WSKAŹNIKI RODZAJE Wskaźniki do obiektów stałych: to wskaźniki które nie mogą modyfikować obiektów na które pokazują (choć same obiekty nie muszą być stałe...): int c=111; // zwykła zmienna const int *wskaz1; //definicja wskaźnika do obiektu stałego wskaz1=&c; //ustawienie wskaźnika na obiekt //*wskaz1=222; // Błąd! Nie wolno modyfikować zawartości! Jeśli jednak mamy obiekt (zmienną) stały, to wskaźnik do pokazywania nań musi być wskaźnikiem do obiektów stałych: const int d=33; //int *wskaz2=&d ; //Błąd! nie można na stałą pokazywać zwykłym wskaźnikiem const int *wskaz2; wskaz2=&d; //OK 14

WSKAŹNIKI RODZAJE Stałe (nieruchome) wskaźniki: to wskaźniki których nie można przesuwać (ale mogą modyfikować zawartość obiektów, na które pokazują): 15

WSKAŹNIKI RODZAJE I jeszcze... stałe (nieruchome) wskaźniki do obiektów stałych : to wskaźniki łączące powyższe cechy (których nie można przesuwać i nie mogą modyfikować zawartości obiektów, na które pokazują): 16

WSKAŹNIKI RODZAJE Podsumowując Deklaracja wskaźnika ma postać: [const] typ * [const] wskaźnik co daje 4 możliwości: Typ wskaźnikowy Nazwa Dostęp do pamięci Zmiana adresu typ * wskaźnik odczyt i zapis dozwolona const typ * wskaźnik do stałej tylko odczyt dozwolona typ * const stały wskaźnik odczyt i zapis niedozwolona const typ * const stały wskaźnik do stałej tylko odczyt niedozwolona Format wykorzystywany do wypisania wskaźnika jest zależny od typu komputera. Część systemów wyświetla je jako liczby szesnastkowe (np. 0x22fef4), inne jako liczby dziesiętne (np. 2293492). 17

WSKAŹNIKI A TABLICE int tablica[5]; //definicja 5-elementowej tablicy elementów typu int int *tab_wsk=&tablica[0]; // definicja wskaźnika do typu int i ustawienie go // na element o indeksie 0 //lub: int *tab_wsk=tablica; // j.w. lub: Nazwa tablicy jest adresem jej początku! Nazwa tablicy jest stałym wskaźnikiem (takim, którego nie można przesuwać) do jej elementu o indeksie 0. Zatem możemy się wskazać np. na czwarty element tablicy (czyli element o indeksie 3) tak: int *tab_wsk=tablica; tab_wsk+=3; // teraz wskaźnik pokazuje na tablica[3] 18

WSKAŹNIKI A TABLICE Dodanie do wskaźnika liczby całkowitej powoduje, że pokazuje on o tyle właśnie elementów tablicy dalej (niezależnie od typu elementów tablicy!) int v[5]; int *v_wsk=v; (int: 4 bajty) v_wsk+=2; Wyrażenie v_wsk[i] jest równoważne *(v_wsk+i), np.: cout<<v_wsk[3]<<endl; // wypisanie zawartości elementu tablicy o indeksie 3 cout<<*(v_wsk+3)<<endl; // wypisanie zawartości elementu tablicy o indeksie 3 19

WSKAŹNIKI A TABLICE Przykład: 20

OPERACJE NA WSKAŹNIKACH Dozwolone operacje arytmetyczne na wskaźnikach to: 1. Dodawanie i odejmowanie od nich liczb naturalnych. W efekcie wskaźnik jest przesuwany na inny element tablicy (lub poza nią). 2. Odejmowanie wskaźników pokazujących na tę samą tablicę. W efekcie uzyskuje się liczbę elementów tablicy dzielących oba wskaźniki, np.: A jeśli odejmie się 2 wskaźniki pokazujące na dwie różne tablice? Sprawdź 21

OPERACJE NA WSKAŹNIKACH Porównywanie wskaźników Można stosować operatory porównania: ==!= < > <= >= Jeśli dwa wskaźniki są równe (wsk1==wsk2) to znaczy, że pokazują na te same obiekty. Jeśli dwa wskaźniki są różne (wsk1!=wsk2) to znaczy, że pokazują na różne obiekty. Używanie pozostałych operatorów porównania ma sens jedynie wtedy, jeśli pokazują na tę samą tablicę. 22

OPERACJE NA WSKAŹNIKACH Przykład: 23

WSKAŹNIKI JAKO ARGUMENTY FUNKCJI Przekazywanie argumentów do funkcji (odbieranie argumentów w funkcji) : 1. Przez wartość; 2. Przez wskaźnik ; 3. Przez referencję. Ad. 1. Przekazywanie przez wartość (przypomnienie). o Funkcja pracuje na kopii przekazywanej zmiennej, więc nie ma możliwości jej modyfikowania; o Kopia ta jest niszczona po wyjściu z funkcji. int funkcja(int x) // Funkcja odbierająca argument przez wartość { return 60*x; } //---Fragment funkcji main() int a=4, b; cout<<"a="<<a<<", b="<<b<<endl; // a=4, b=? b=funkcja(a); cout<<"a="<<a<<", b="<<b<<endl;; // a=4, b=240 24

WSKAŹNIKI JAKO ARGUMENTY FUNKCJI Ad. 2. Przekazywanie przez wskaźnik. o o Funkcja pracuje na oryginale przekazywanej zmiennej, może ją modyfikować; np.: void f16(double *a) {... // ciało funkcji } funkcja inicjalizuje wskaźnik na podstawie przekazanego adresu o Wywołanie np.: f16(&zm); przesyłamy adres zmiennej Ad. 3. Przekazywanie przez referencję. o Funkcja pracuje na oryginale przekazywanej zmiennej, może ją modyfikować; o więcej przy referencjach 25

WSKAŹNIKI JAKO ARGUMENTY FUNKCJI Przykład: 26