Poznaj C++ w$ godziny0186

Poznaj C++ w$ godziny0186



175


Zaawansowane referencje i wskaźniki

Wskaźnik plnt jest deklarowany i inicjalizowany adresem obszaru zarezerwowanego na stercie za pomocą operatora new. Adres ten jest sprawdzany i jeśli nie jest pusty, to obszar przez niego wskazywany jest przypisywany do referencji rlnt. Uzyskujemy referencje do obiektu int na stercie.

Nie zwracaj referencji do obiektów lokalnych

Często, kiedy programista pozna referencje, to wykorzystuje je, gdzie się tylko da.

Można wtedy, mówiąc prostym językiem, „przedobrzyć”. Pamiętaj, że referencja jest zawsze odnośnikiem do innego, istniejącego obiektu. Jeśli przekazujesz referencje do lub z funkcji zawsze zadaj sobie pytanie, czy obiekt, do którego się dana referencja odnosi, będzie nadal istniał.

Listing 12.4. ilustruje próbę zwrócenia z funkcji referencji do lokalnego obiektu (który po wyjściu z funkcji przestaje istnieć).

Listing 12.4. Próba zwrócenia referencji do lokalnego obiektu

1:    // Listing 12.4

2:    // Zwracanie referencji do

3:    // lokalnego obiektu

4:

5:    #include <iostream.h>

6:

7:    class ZwyklyKot

8:    {

9:    public:

10:    ZwyklyKot (int wiek, int waga);

11:    -ZwyklyKot() {)

12:    int    PobierzWiek()    {    return    jegoWiek;    )

13:    int    PobierzWaga()    {    return    jegoWaga;    )

14:    private:

15:    int    jegoWiek;

16:    int    jegoWaga;

17:    } ;

18:

19:    ZwyklyKot::ZwyklyKot(int wiek, int waga):

20:    jegoWiek(wiek), jegoWaga(waga) {)

21:

22:    ZwyklyKot SFunkcja();

23:

24:    int main()

25:    {

26:    ZwyklyKot SrKot    =    Funkcja ();

27:    int wiek = rKot.PobierzWiek();

28:    cout « "rKot ma " « wiek « " lat!\n";

29:    return 0;

30:    )

31:

32:    ZwyklyKot &Funkcja()

33:    {

ZwyklyKot Frisky(5,9); return Frisky;


34

35

)


36

Zaawansowane referencje i wskaźniki

175


Wskaźnik plnt jest deklarowany i inicjalizowany adresem obszaru zarezerwowanego na stercie za pomocą operatora new. Adres ten jest sprawdzany i jeśli nie jest pusty, to obszar przez niego wskazywany jest przypisywany do referencji rlnt. Uzyskujemy referencje do obiektu int na stercie.

Nie zwracaj referencji do obiektów lokalnych

Często, kiedy programista pozna referencje, to wykorzystuje je, gdzie się tylko da. Można wtedy, mówiąc prostym językiem, „przedobrzyć”. Pamiętaj, że referencja jest zawsze odnośnikiem do innego, istniejącego obiektu. Jeśli przekazujesz referencje do lub z funkcji zawsze zadaj sobie pytanie, czy obiekt, do którego się dana referencja odnosi, będzie nadal istniał.

Listing 12.4. ilustruje próbę zwrócenia z funkcji referencji do lokalnego obiektu (który po wyjściu z funkcji przestaje istnieć).

Listing 12.4. Próba zwrócenia referencji do lokalnego obiektu

1:    // Listing 12.4

2:    // Zwracanie referencji do

3:    II lokalnego obiektu

4:

5:    Sinclude <iostreajn.h>

6:

7:    class ZwyklyKot

8:    {

9:    public:

10:    ZwyklyKot (int wiek, int waga);

11:    ~ ZwyklyKot () U

12:    int    PobierzWiek ()    (    return    jegoWiek;    )

13:    int    PobierzWaga()    {    return    jegoWaga;    )

14:    private:

15:    int    jegoWiek;

16:    int    jegoWaga;

17:    );

18:

19:    ZwyklyKot::ZwyklyKot(int wiek, int waga):

20:    jegoWiek(wiek), jegoWaga(waga) ()

21:

22:    ZwyklyKot SFunkcja();

23:

24 :    int main ()

25:    (

26:    ZwyklyKot SrKot = Funkcja{);

27:    int wiek = rKot.PobierzWiek();

28:    cout « "rKot ma    "    « wiek « " lat!\n";

29:    return 0;

30:    )

31:

32:    ZwyklyKot SFunkcjaO

33:    (

34:    ZwyklyKot Frisky(5,9);

35:    return Frisky;

36:    )


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0180 169Zaawansowane referencje i wskaźniki 39:    FunkcjaDruga(
Poznaj C++ w$ godziny0182 Zaawansowane referencje i wskaźniki 171 int PobierzWiek() const { return j
Poznaj C++ w$ godziny0184 Zaawansowane referencje i wskaźniki 173 Ponieważ wiemy, że obiekt nie będz
Poznaj C++ w$ godziny0188 177Zaawansowane referencje i wskaźniki 18:    ZwyklyKot::Zw
Poznaj C++ w$ godziny0190 Zaawansowane referencje i wskaźniki 179 ZAWSZE NIGDY Zawsze przekazuj p
Poznaj C++ w$ godziny0156 145Zaawansowane wykorzystanie wskaźników W liniach 6-13 deklarujemy klasę
Poznaj C++ w$ godziny0178 Godzina 12Zaawansowane referencje i wskaźniki W ciągu ostatnich trzech god
Poznaj C++ w$ godziny0158 Zaawansowane wykorzystanie wskaźników 147 32:    } 33: 34:
Poznaj C++ w$ godziny0160 Zaawansowane wykorzystanie wskaźników 149Do czego służy wskaźnik this Gdyb
Poznaj C++ w$ godziny0162 Zaawansowane wykorzystanie wskaźników 151 Zaawansowane wykorzystanie wskaź
Poznaj C++ w$ godziny0033 Program w C++ 17 Sednem naszego programu jest linia 5. Obiekt cout użyty z
Poznaj C++ w$ godziny0070 Instrukcje i wyrażenia 55 if (x != 0)    // jeśli x jest ró
Poznaj C++ w$ godziny0089 Funkcje 75 Kiedy wartość jest odkładana na stos, to jest umieszczana w kom
Poznaj C++ w$ godziny0139 128 Godzina 9 Stop. Przeczytaj tę definicję jeszcze raz. Wskaźnik jest zmi
Poznaj C++ w$ godziny0144 Wskaźniki 133 Operator dostępu pośredniego ( * ) jest używany w dwóch różn
Poznaj C++ w$ godziny0150 Wskaźniki 139 Jeśli new nie może zarezerwować miejsca na stercie (bądź co
Poznaj C++ w$ godziny0154 Godzina 10Zaawansowanewykorzystanie wskaźników Jedną z najpotężniejszych w
Poznaj C++ w$ godziny0165 154 Godzina 11 Wskaźniki są zmiennymi przechowującymi adresy innych obiekt

więcej podobnych podstron