Poznaj C++ w$ godziny0172

Poznaj C++ w$ godziny0172



Referencje 161

Referencje 161

18

{

19

int temp;

20

21

cout « "Zamień, ‘■♦♦py « "\n";

Przed zamiana, *px: " « *px « " *py: " «

22

23

temp = *px;

24

*px = *py;

25

♦py = temp;

26

27

cout « "Zamień, ♦♦♦py « "\n";

Po zamianie, *px: " « *px « " *py: " «

28

29

1


EFEKT DZIAŁANIA;

Main. Przed zamiana, x: 5 y: 10 Zamień. Przed zamiana, *px: 5 *py: 10 Zamień. Po zamianie, *px: 10 *py: 5 Main. Po zamianie, x: 10 y: 5

ANALIZA:


Udało się! W linii 5 zmieniliśmy prototyp funkcji Zamień () tak, aby jako parametry przyjmowała nie zmienne całkowite, a wskaźniki na nie. Zobacz, jak wywołana jest funkcja Zamień(), jej parametrami są adresy zmiennych, które chcemy zamienić.

W linii 19 deklarowana jest zmienna lokalna temp. Nie musi ona być wskaźnikiem ponieważ jej zadaniem jest przechowanie wartości *px (czyli wartości x w funkcji wywołującej). Po zakończeniu funkcji zmienna temp jest usuwana z pamięci.

W linii 23 zmiennej temp przypisywana jest wartość wskazywana przez px. W linii 24 wartość spod adresu px jest przepisywana pod adres zawarty w py. W linii 25, wartość przechowywane w temp jest przepisywana pod adres py.

Efektem końcowym jest zamiana wartości zmiennych w funkcji wywołującej.

Implementacja funkcji Zamień () z wykorzystaniem referencji

Poprzedni program działa, lecz funkcja Zamień () jest raczej nieporęczna. Po pierwsze, wielokrotne pośrednie odwoływanie się do zmiennych wskazywanych powoduje, że takie rozwiązanie jest podatne na błędy. Po drugie, konieczność przekazywania adresów zmiennych powoduje „ujawnienie” wewnętrznych mechanizmów funkcji Zamień ().

Zamierzeniem C++ jest oddzielenie użytkownika funkcji od jej wewnętrznych mechanizmów i implementacji. Przekazywanie wskaźników przenosi część ciężaru wykonania funkcji na funkcję wywołującą (na użytkownika). Listing 11.6. demonstruje rozwiązanie problemu z wykorzystaniem referencji.

18

(

19

int temp;

20

21

cout « "Zamień. -*py « "\n";

Przed zamiana, *px: " « *px « " *py: " «

22

23

temp = *px;

24

*px = *py;

25

*py = temp;

26

27

cout « "Zamień. w*Py « "\n";

Po zamianie, *px: " « *px « " *py: " «

28

29

1

EFEKT DZIAŁANIA:

Main. Przed zamiana, x: 5 y: 10 Zamień. Przed zamiana, *px: 5 *py: 10 Zamień. Po zamianie, *px: 10 *py: 5 Main. Po zamianie, x: 10 y: 5

Udało się! W linii 5 zmieniliśmy prototyp funkcji Zamień () tak, aby fi jako parametry przyjmowała nie zmienne całkowite, a wskaźniki na '    -<■    nje 2obacz, jak wywołana jest funkcja Zamień (), jej parametrami są

adresy zmiennych, które chcemy zamienić.

W linii 19 deklarowana jest zmienna lokalna temp. Nie musi ona być wskaźnikiem ponieważ jej zadaniem jest przechowanie wartości *px (czyli wartości x w funkcji wywołującej). Po zakończeniu funkcji zmienna temp jest usuwana z pamięci.

W linii 23 zmiennej temp przypisywana jest wartość wskazywana przez px. W linii 24 wartość spod adresu px jest przepisywana pod adres zawarty w py. W linii 25, wartość przechowywane w temp jest przepisywana pod adres py.

Efektem końcowym jest zamiana wartości zmiennych w funkcji wywołującej.

Implementacja funkcji Zamień () z wykorzystaniem referencji

Poprzedni program działa, lecz funkcja Zamień () jest raczej nieporęczna. Po pierwsze, wielokrotne pośrednie odwoływanie się do zmiennych wskazywanych powoduje, że takie rozwiązanie jest podatne na błędy. Po drugie, konieczność przekazywania adresów zmiennych powoduje „ujawnienie" wewnętrznych mechanizmów funkcji Zamień ().

Zamierzeniem C++ jest oddzielenie użytkownika funkcji od jej wewnętrznych mechanizmów i implementacji. Przekazywanie wskaźników przenosi część ciężaru wykonania funkcji na funkcję wywołującą (na użytkownika). Listing 11.6. demonstruje rozwiązanie problemu z wykorzystaniem referencji.


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0078 64 Godzina 5 17:    float Konwertuj(float Fer) 18: { 19: &n
Poznaj C++ w$ godziny0166 Referencje 155 Referencje 155 ANALIZA: W linii 8 deklarujemy zmienną lokal
Poznaj C++ w$ godziny0168 Referencje 157 Referencje 157 23; cout « ” 24: cout « " 25: re
Poznaj C++ w$ godziny0170 Referencje 159Przekazywanie argumentów funkcji przez referencje W trakcie
Poznaj C++ w$ godziny0174 Referencje 163 Linie 24-26 zamieniają wartości. Efekt zamiany wypisywany j
Poznaj C++ w$ godziny0176 Referencje 165 Funkcja Potęgi () sprawdza poprawność parametru przekazaneg
14 15 ciężka 16 17 bardzo ciężka 18 19 niezwykle ciężka 20 I) Z
ORTOGRAFIA KL1 4 ZESZYT 2 Ó U (68) * przewrócił 31 przód 8, 12 przygód 18, 19, 34, 35 przyjaciółki 2
statystyka6 GODZINA    TINĘ b 7 3 1 ID 11 15 13 14    17 16 ^ 20
s104 105 104 19.    x = t2, y = t - it3, t e [0, /3] 20.    x = t, y =
s55 (4) § 19: Czasownik vouioir/§ 20-21: Wyrażanie przeszłości Czasownik vouloir Vouloir jest czasow
Poznaj C++ w$ godziny0188 177Zaawansowane referencje i wskaźniki 18:    ZwyklyKot::Zw
Poznaj C++ w$ godziny0010 Spis treści    ix 11    Referencje

więcej podobnych podstron