Poznaj C++ w$ godziny0167

Poznaj C++ w$ godziny0167



156 Godzina 11

156 Godzina 11

ANALIZA:


Podobnie jak w poprzednim przykładzie deklarujemy referencję do zmiennej intJeden. Następnie wypisujemy adresy dwóch zmiennych. Zgodnie z oczekiwaniami są one identyczne. W C++ nie ma możliwości otrzymania fizycznego adresu referencji gdyż byłoby to zbędne (w przeciwieństwie do wskaźników). Referencje są inicjalizowane w momencie tworzenia i zawsze stanowią synonim obiektu docelowego, nawet w przypadku użycia operatora adresu.

Np. jeśli miałbyś klasę o nazwie Prezydent, mógłbyś zadeklarować obiekt tej klasy następująco:

Prezydent William_Jefferson_Clinton;

Teraz możesz zadeklarować referencję do obiektu klasy Prezydent:

Prezydent &Bill_Clinton = William_Jefferson_Clinton;

W pamięci będzie istnieć tylko jeden obiekt. Obydwa stworzone identyfikatory odnoszą się do tego obiektu. Każda operacja wykonana na obiekcie Bill_Clinton zostanie również wykonana na William_Jef ferson_Clinton.

Pamiętaj, aby odróżniać symbol & w linii 9 listingu 11.2, który deklaruje referencje

0    nazwie rReferencja do obiektu int, a symbolem & w liniach 15 i 16, zwracającym adres odpowiednio zmiennej intJeden i rReferencja.

Normalnie, przy wykorzystywaniu referencji, nie jest Ci potrzebny operator adresu. Po prostu używasz referencji tak, jak obiektu docelowego. Widać to w linii 13.

Czasami nawet doświadczeni programiści nie są pewni, co się stanie, przy próbie ponownego przypisania do referencji. Okazuje się, że taka operacja powoduje przypisanie nowej wartości do obiektu docelowego (co po chwili namysłu jest oczywiste

1    zgodne z definicją referencji). Ilustruje to listing 11.3.

Listing 11.3. Przypisanie do referencji

1:    // Listing 11.3

2:    // Przypisywanie    do    referencji

3:

4:    #include <iostream.h>5:

6:    int main () 7:    {

8:    int    intJeden;

9:    int    SrReferencja = intJeden;

10:

11:    intJeden = 5;

12:    cout    «    "intJeden:\t" « intJeden « endl;

13:    cout    «    "rReferencja:\t" « rReferencja « endl;

14:    cout    «    "SintJeden:\t"    « SintJeden « endl;

15:    cout « "SrReferencja:\t" « SrReferencja « endl;

16:

17:    int    intDwa = 8;

18:    rReferencja = intDwa; // zastanów sie nad ta linia!

19:    cout    «    "\nintJeden:\t" « intJeden « endl;

20:    cout    «    "intDwa:\t\t" « intDwa « endl;

21:    cout    «    "rReferencja:\t" « rReferencja « endl;

22:    cout    «    "SintJeden:\t"    « SintJeden « endl;

Podobnie jak w poprzednim przykładzie deklarujemy referencję do zmiennej intJeden. Następnie wypisujemy adresy dwóch zmiennych. Zgodnie z oczekiwaniami są one identyczne. W C++ nie ma możliwości otrzymania fizycznego adresu referencji gdyż byłoby to zbędne (w przeciwieństwie do wskaźników). Referencje są inicjalizowane w momencie tworzenia i zawsze stanowią synonim obiektu docelowego, nawet w przypadku użycia operatora adresu.

ANALIZA


Np. jeśli miałbyś klasę o nazwie Prezydent, mógłbyś zadeklarować obiekt tej klasy następująco:

Prezydent William_Jefferson_Clinton;

Teraz możesz zadeklarować referencję do obiektu klasy Prezydent:

Prezydent SBill_Clinton = William_Jefferson_Clinton;

W pamięci będzie istnieć tylko jeden obiekt. Obydwa stworzone identyfikatory odnoszą się do tego obiektu. Każda operacja wykonana na obiekcie Bill_Clinton zostanie również wykonana na William_Jefferson_Clinton.

Pamiętaj, aby odróżniać symbol & w linii 9 listingu 11.2, który deklaruje referencje

0    nazwie rReferencja do obiektu int, a symbolem & w liniach 15 i 16, zwracającym adres odpowiednio zmiennej intJeden i rReferencja.

Normalnie, przy wykorzystywaniu referencji, nie jest Ci potrzebny operator adresu. Po prostu używasz referencji tak, jak obiektu docelowego. Widać to w linii 13.

Czasami nawet doświadczeni programiści nie są pewni, co się stanie, przy próbie ponownego przypisania do referencji. Okazuje się, że taka operacja powoduje przypisanie nowej wartości do obiektu docelowego (co po chwili namysłu jest oczywiste

1    zgodne z definicją referencji). Ilustruje to listing 11.3.

Listing 11.3. Przypisanie do referencji

1:    // Listing 11.3

2:    II Przypisywanie    do    referencji

3:

4:    #include <iostream.h>5:

6:    int roain()7:    {

8:    int intJeden;

9:    int    SrReferencja = intJeden;

10:

11:    intJeden = 5;

12:    cout « "intJeden:\t" « intJeden « endl;

13:    cout    «    "rReferencja:\t" « rReferencja    « endl;

14:    cout    «    "SintJeden:\t"    « SintJeden «    endl;

15:    cout « "SrReferencja:\t" « SrReferencja « endl;

16:

17:    int    intDwa = 8;

18:    rReferencja = intDwa; // zastanów sie nad ta linia!

19:    cout « "\nintJeden:\t" « intJeden « endl;

20:    cout « "intDwa:\t\t" « intDwa « endl;

21:    cout    «    "rReferencja:\t" « rReferencja    « endl;

22:    cout    «    "SintJeden:\t"    « SintJeden «    endl;


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0108 Więcej o klasach 95 Więcej o klasach 95Dlaczego wykorzystywać kompilator d
Poznaj C++ w$ godziny0232 Tablice 223Usuwanie tablicy ze sterty Rodzina jest wskaźnikiem do tablicy
wykład 11 (17) Podobnie jak dla entalpii, definiujemy entropię standartową jako entropię dla substa
DSC00838 (11) Język szwedzki, podobnie jak na przykład angielski, jest językiem pozycyjnym. Oznacza
Matematyka 2 (7 286 IV. Równania różniczkowe zwyczajne y= C* - Ix>0. Dla równania liniowego 11 r
Scan156 (2) 156 B.F. Pennington i R.K. Olson wych. Podobnie jak oszacowania odziedziczalności deficy
11 analiz jest niezbędny szerszy kontekst niż ten, do którego nawiązują tradycyjne sprawozdania oraz
s136 (2) 136 Poznaj Linux 2. Do wyłączania zabezpieczenia, podobnie jak w poprzednim przypadku, służ
Poznaj C++ w$ godziny0010 Spis treści    ix 11    Referencje
Poznaj C++ w$ godziny0066 Instrukcje i wyrażenia 51 11:    if (x > 10) 12:  &
Poznaj C++ w$ godziny0067 52 Godzina 4 10: 11:    if
Poznaj C++ w$ godziny0084 70 Godzina 5 70 Godzina 5 8: 9: 10 11 12 13 14 15 16 17 18 19 20
Poznaj C++ w$ godziny0100 86 Godzina 6 86 Godzina 6 11 12 13 14 15 16 17 18 19 20
Poznaj C++ w$ godziny0130 118 Godzina 8 11:    { 12:    lieznik++; 13:
Poznaj C++ w$ godziny0165 154 Godzina 11 Wskaźniki są zmiennymi przechowującymi adresy innych obiekt

więcej podobnych podstron