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.
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>
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;
18:
19: ZwyklyKot::ZwyklyKot(int wiek, int waga):
20: jegoWiek(wiek), jegoWaga(waga) {)
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
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.
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;
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;
31:
32: ZwyklyKot SFunkcjaO
34: ZwyklyKot Frisky(5,9);
35: return Frisky;