Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Programowanie strukturalne i obiektowe C++ Zmienne referencyjne i zmienne wskaźnikowe Robert Nowak.

Podobne prezentacje


Prezentacja na temat: "Programowanie strukturalne i obiektowe C++ Zmienne referencyjne i zmienne wskaźnikowe Robert Nowak."— Zapis prezentacji:

1 Programowanie strukturalne i obiektowe C++ Zmienne referencyjne i zmienne wskaźnikowe Robert Nowak

2 Zmienne typu referencyjnego Poza podstawowymi typami w języku C++ istnieje tzw. typ referencyjny. Zmienne typu referencyjnego służą do reprezentacji innych zmiennych w programie. Operacje na zmiennej x są równoważne operacjom na zmiennej referencyjnej związanej z tą zmienną. W praktyce typy i zmienne referencyjne są wykorzystywane podczas przekazywania parametrów do funkcji oraz zwracania wartości funkcji.

3 Deklaracja zmiennej referencyjnej Deklaracja zmiennej referencyjnej przedstawia się następująco: typ &identyfikator_ref=identyfikator_zmiennej;

4 Przykład programu 1 #include using namespace std; int main() { float waga=68.5; float &wartosc = waga; cout <<"Wartosc zmiennej waga wynosi "<

5 Referencja - ważne zasady i cechy Referencja musi zostać zainicjalizowana - nie możemy zadeklarować zmiennej typu referencyjnego, a później dokonać przypisania, połączenia jej z jakąś inną zmienną. Musi to być koniecznie inicjalizacja. Referencja jest w swojej istocie stała - referencja wskazuje zawsze na konkretną zmienną i nie możemy nagle jej powiedzieć, że ma pokazywać na inną zmienną; referencja jest na zawsze związana ze zmienną, którą została zainicjalizowana.

6 Referencja - ważne zasady i cechy Referencja musi zawsze być dokładnie takiego samego typu jak zmienna, z którą jest powiązana Referencją poza linijką deklaracji (i jednocześnie inicjalizacji) posługujemy się jak zwykłą zmienną Wartość zmiennej typu referencyjnego jest równa wartości zmiennej, z którą referencja jest powiązana - ponieważ referencja jest tylko dodatkową nazwą dla danej zmiennej, to jej wartość jest dokładnie taka sama jak wartość zmiennej, której dotyczy referencja.

7 Zmienne w pamięci operacyjnej Każda zmienna, która jest zadeklarowana w programie zostaje umieszczona w pamięci operacyjnej na czas działania programu. Pamięć operacyjna to zbiór komórek pamięci. Każda komórka w pamięci ma określone położenie - adres. Adres jest liczbą, która jednoznacznie określa położenie komórki w pamięci. Każda zmienna, którą deklarujemy w programie jest umieszczana w komórkach pamięci. W zależności, jakiego typu jest ta zmienna, może ona zostać umieszczona w jednej, dwóch lub większej liczbie komórek pamięci. Jednak adres zmiennej pokazuje zawsze na pierwszą komórkę pamięci - tam zaczyna się właśnie nasza zmienna.

8 Operator pobrania adresu w C++ Do pobierania adresu zmiennej dowolnego typu służy operator pobrania adresu – w języku C++ takim operatorem jest &. W rzeczywistości z operatora & – operatora pobrania adresu korzystaliśmy już w przypadku referencji. Kiedy deklarowaliśmy (i jednocześnie inicjowaliśmy) zmienną typu referencyjnego, mówiliśmy kompilatorowi tak naprawdę, że adres referencji ma być równy adresowi zmiennej, z którą została związana referencja. Zapis jednak w tym przypadku był nieco mylący, bowiem operator pobrania adresu znajdował się tylko i wyłącznie po stronie referencji, a po stronie zmiennej operatora tego już nie było.

9 Przykład programu 2 #include using namespace std; int main() { int mojaLiczba=23; cout <<"Wartosc zmiennej to "<

10 Pojęcie wskaźnika W języku C++ istnieje możliwość definiowania zmiennych zawierających adres jakiegoś obszaru w pamięci, przy czym obszar ten może być interpretowany jako zmienna określonego typu. Zmienne zawierające adres obszaru pamięci nazywamy zmiennymi wskaźnikowymi lub krótko wskaźnikami. Wskaźnik więc, jest zmienną, przechowującą adres pamięci.

11 Deklaracja wskaźnika Schematycznie wskaźnik deklarujemy następująco: typ *nazwa_wskaznika; Jak widać wskaźnik oznaczamy za pomocą gwiazdki pojawiającej się przed nazwą zmiennej. Deklarację taką odczytujemy od końca. Na widok gwiazdki mówimy: „jest wskaźnikiem do pokazywania na zmienne typu…”.

12 Przykład wskaźnika int *wska; Jest to deklaracja wskaźnika wska mogącego pokazywać na zmienne (obiekty) typu int. wska – jest wskaźnikiem do pokazywania na zmienne typu int.

13 Powiązanie wskaźnika ze zmienną Wskaźniki przechowują adresy! Wartością każdego wskaźnika jest adres zmiennej, na którą ten wskaźnik wskazuje o ile tylko wskaźnik został ustawiony na daną zmienną. Ustawienia takiego dokonujemy następująco: nazwa_wskaznika=&nazwa_zmiennej; przy czym typ wskaźnika i typ zmiennej muszą być zgodne.

14 Deklaracja wskaźnika wraz z inicjalizacją Schematycznie deklaracja wskaźnika wraz z jego inicjalizacją wygląda następująco: typ *nazwa_wskaznika = &nazwa_zmiennej; typ *nazwa_wskaznika; nazwa_wskaznika = &nazwa_zmiennej; Jest to równoważne:

15 Operator wyłuskania Operator wyłuskania oznaczamy za pomocą * i poprzedzając nazwę wskaźnika tym operatorem, uzyskujemy wartość zmiennej, na którą dany wskaźnik wskazuje.

16 Przykład programu 3 #include using namespace std; int main() { int liczba=6; // zmienna typu int int *wskaznik; // wskaznik do typu int wskaznik=&liczba; // powiazanie wskaznika ze zmienna liczba cout <<"Wartosc zmiennej liczba wynosi "<

17 Następny przykład programu 4 #include using namespace std; int main() { float a=6.23; // zmienna typu float float *wsk; // wskaznik do typu float wsk=&a; // powiazanie wskaznika ze zmienna a cout <<"Wartosc zmiennej a wynosi "<

18 Ciąg dalszy programu 4 // wsk=21; // UWAGA - BLAD !!! *wsk=21; cout <<"\nWartosc zmiennej a wynosi "<

19 Program 5 #include using namespace std; int main() { string a="Zmienna a",b="Zmienna b",c="Zmienna c";//zmienne string string *wsk; // wskaznik do typu string wsk=&a; // powiazanie wskaznika ze zmienna a cout <<"Wartosc zmiennej a wynosi: "<

20 Ciąg dalszy programu 5 *wsk=c; // przypisanie za pomoca wskaznika, rownowazne b=c cout <<"\nWyluskana wartosc ze wskaznika wynosi: "<< *wsk <<'\n'; cout <<"Wartosc zmiennej b wynosi: "<


Pobierz ppt "Programowanie strukturalne i obiektowe C++ Zmienne referencyjne i zmienne wskaźnikowe Robert Nowak."

Podobne prezentacje


Reklamy Google