Poznaj C++ w$ godziny0185

Poznaj C++ w$ godziny0185



174 Godzina 12

52:    // FunkcjaDruga pobiera referencje do stałego obiektu

53:    const ZwyklyKot & FunkcjaDruga (const ZwyklyKot & kot)

54:    <

55:    cout « "FunkcjaDruga. Powrot...\n";

56:    cout « "Frisky ma teraz " « kot.PobierzWiek();

57:    cout « " lat \n";

58:    // kot.UstawWiek(8); const!

59:    return kot;

60: )

EFEKT DZIAŁANIA:

Tworzenie kota...

Konstruktor zwykłego kota...

Frisky ma 5 lat Friksy ma 10 lat Wywołanie FunkcjaDruga...

FunkcjaDruga. Powrot...

Frisky ma teraz 10 lat Frisky ma 10 lat

Wywołanie destruktora zwykłego kota...

ANALIZA.


Efekt działania jest taki sam jak w poprzednim przypadku. Istotna zmiana w programie polega na tym, że FunkcjaDruga () pobiera i zwraca referencje do stałego obiektu (a nie, jak poprzednio, wskaźniki). Ponownie okazuje się, że praca z referencjami jest łatwiejsza niż ze wskaźnikami przy jednoczesnym zachowaniu oszczędności czasu, pamięci i gwarancji niezmienności przekazywanego obiektu.

Kiedy wykorzystywać referencje, a kiedy wskaźniki

Programiści C++ preferują referencje. Są łatwiejsze, bardziej eleganckie i pozwalają na lepsze ukrycie szczegółów implementacyjnych.

Jednak raz stworzona referencja nie może być przypisana do innego obiektu. Jeśli chcesz mieć wskazanie najpierw na jeden obiekt, a następnie na drugi, musisz wykorzystać wskaźniki. Referencje nie mogą być puste (nuli) i jeśli jest możliwość, że obiekt będzie pusty to wykorzystanie referencji w takim przypadku jest błędem, trzeba użyć wskaźnika.

Inny problem pojawia się przy wykorzystaniu operatora new. Jeśli new nie jest w stanie zarezerwować pamięci na stercie to zwraca pusty (nuli) wskaźnik. Referencja nie może być pusta dlatego nie wolno inicjalizować referencji do zarezerwowanej pamięci zanim nie upewnimy się, że wskaźnik nie jest pusty. Oto przykładowa sekwencja instrukcji, która prawidłowo obsługuje tworzenie referencji do pamięci na stercie:

int *plnt = new int; if (plnt != NULL) int Srlnt = *plnt;

52:    // FunkcjaDruga pobiera referencje do stałego obiektu

53:    const ZwyklyKot & FunkcjaDruga (const ZwyklyKot & kot)

54:    (

55:    cout « "FunkcjaDruga. Powrot...\n";

56:    cout « "Frisky ma teraz " « kot.PobierzWiek();

57:    cout « " lat \n";

58:    // kot.UstawWiek(8); const!

59:    return kot;

60: )

EFEKT DZIAŁANIA:

Tworzenie kota...

Konstruktor zwykłego kota...

Frisky ma 5 lat Friksy ma 10 lat Wywołanie FunkcjaDruga...

FunkcjaDruga. Powrot...

Frisky ma teraz 10 lat Frisky ma 10 lat

Wywołanie destruktora zwykłego kota...

ANALIZA:


Efekt działania jest taki sam jak w poprzednim przypadku. Istotna zmiana w programie polega na tym, że FunkcjaDruga!) pobiera i zwraca referencje do stałego obiektu (a nie. jak poprzednio, wskaźniki). Ponownie okazuje się, że praca z referencjami jest łatwiejsza niż ze wskaźnikami przy jednoczesnym zachowaniu oszczędności czasu, pamięci i gwarancji niezmienności przekazywanego obiektu.

Kiedy wykorzystywać referencje, a kiedy wskaźniki

Programiści C++ preferują referencje. Są łatwiejsze, bardziej eleganckie i pozwalają na lepsze ukrycie szczegółów implementacyjnych.

Jednak raz stworzona referencja nie może być przypisana do innego obiektu. Jeśli chcesz mieć wskazanie najpierw na jeden obiekt, a następnie na drugi, musisz wykorzystać wskaźniki. Referencje nie mogą być puste (nuli) i jeśli jest możliwość, że obiekt będzie pusty to wykorzystanie referencji w takim przypadku jest błędem, trzeba użyć wskaźnika.

Inny problem pojawia się przy wykorzystaniu operatora new. Jeśli new nie jest w stanie zarezerwować pamięci na stercie to zwraca pusty (nuli) wskaźnik. Referencja nie może być pusta dlatego nie wolno inicjalizować referencji do zarezerwowanej pamięci zanim nie upewnimy się, że wskaźnik nie jest pusty. Oto przykładowa sekwencja instrukcji, która prawidłowo obsługuje tworzenie referencji do pamięci na stercie:

int *plnt = new int; if (plnt != NULL) int srlnt = *plnt;


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0028 12 Godzina 1 Przepisz program dokładnie. Pamiętaj o wszystkich znakach. Np
Poznaj C++ w$ godziny0010 Spis treści    ix 11    Referencje
Poznaj C++ w$ godziny0033 Program w C++ 17 Sednem naszego programu jest linia 5. Obiekt cout użyty z
Poznaj C++ w$ godziny0105 Proste klasy 91 Linia 58 zawiera definicję obiektu Frisky (będącego klasy
Załącznik nr 2 /IR-21/PO-05 Data wydania: 2014-12-30 Strona 2 z 5 Pobieranie moczu do badania
DSC00751 Zastosowanie wskaźników w argumentach funkcji • Wskaźnik do stałego obiektu uniemożliwia ja
Poznaj C++ w$ godziny0181 170 Godzina 12 wyrzucany z pamięci poprzez wywołanie destruktora. Widać to
Poznaj C++ w$ godziny0035 Program w C++ 19Funkcje ■ain() jest funkcją specjalną. Jest automatycznie
Poznaj C++ w$ godziny0036 20 Godzina 2Korzystanie z funkcji Funkcja może zwracać albo jakąś wartość
Poznaj C++ w$ godziny0037 Program w C++ 21 16:    cout « "Wywołanie funkcji Add(
Poznaj C++ w$ godziny0063 48 Godzina 4 12:    cout « "


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$ godziny0072 58 Godzina 5 Rysunek 5.1 W momencie wywołania funkcji program przechodzi d
Poznaj C++ w$ godziny0073 Funkcje 59Rysunek 5.2 Funkcje 59 Prototyp, pod względem typu wartości zwra
Poznaj C++ w$ godziny0075 Funkcje 61Rysunek 5.3 typ zwracanej wartości
Poznaj C++ w$ godziny0077 Funkcje 63EFEKT DZIAŁANIA: Podaj temperaturę w stopniach Fehrenheit-a: 212
Poznaj C++ w$ godziny0079 Funkcje 65Funkcje jako parametry innych funkcji Mimo że można używać funkc
Poznaj C++ w$ godziny0081 Funkcje 67 Program wraca do funkcji main(), do linii 13. Okazuje się, że w

więcej podobnych podstron