Referencje 163
Linie 24-26 zamieniają wartości. Efekt zamiany wypisywany jest w linii 27. Wykonanie programu wraca do funkcji wywołującej (w tym wypadku main()). W linii 14 ponownie wypisywane są wartości zmiennych. Ponieważ były one przekazane do funkcji Zamień () przez referencje, dlatego również zostały zamienione wartościami.
Referencje dają możliwość wygodnego zarządzania normalnymi zmiennymi z jednoczesnym udostępnieniem narzędzi oferowanych przez wskaźniki.
Listing 11.7. zawiera implementację zmiennej Zamień () z wykorzystaniem wskaźników, listing 11.8 z wykorzystaniem referencji. Implementacja oparta o referencje jest łatwiejsza, kod jest prostszy do czytania. Skąd jednak funkcja wywołująca wie, czy wartości są przekazywane przez referencje czy przez wartość? Jako klient (lub użytkownik) funkcji Zamień(), programista musi zagwarantować, że funkcja faktycznie zamieni wartości parametrów.
Tutaj pojawia się kolejna funkcja prototypów. Poprzez analizę zadeklarowanych parametrów w prototypie, który zazwyczaj znajduje się w specjalnym pliku nagłówkowym wraz z innymi prototypami, programista dowiaduje się, że parametry przekazywane do funkcji zamień są przekazywane przez referencje, co w przypadku funkcji Zamień () oznacza, że zostaną one prawidłowo zamienione.
Gdyby funkcja Zamień () była wewnętrzną metodą jakiejś klasy, to deklaracja tej klasy, również zawarta w pliku nagłówkowym, dawała by wszystkie niezbędne programiście informacje o tej funkcji.
W C++ klienci i użytkownicy klas i funkcji opierają się jedynie na plikach nagłówkowych i z nich czerpią wszystkie niezbędne do programowania informacje. Implementacja jest przed klientem (użytkownikiem) ukryta. Takie rozwiązanie pozwala programiście od początku skupić się jedynie na problemie bez zagłębiania się w szczegóły implementacyjne wykorzystywanych klas.
Jak już mówiliśmy, każda funkcja, normalnie może zwrócić tylko jedną wartość. Co jednak zrobić, gdy musisz z funkcji zwrócić dwie wartości? Jedna z możliwości polega na przekazaniu do funkcji przez referencje dwóch roboczych obiektów. Funkcja może nadać im wymagane wartości. Przekazanie przez referencje gwarantuje, że przypisanie wartości nastąpi do obiektów oryginalnych, co umożliwi ich odczytanie. W efekcie uzyskujemy funkcję, która zwraca dwie wartości. Takie rozwiązanie pozwala na ominięcie normalnej wartości zwracanej przez funkcję, którą można w tym momencie wykorzystać np. do zwracania kodu błędu.
Problem zwracania wielu wartości można rozwiązać również z wykorzystaniem wskaźników. Listing 11.7. demonstruje funkcję zwracającą trzy wartości. Dwie z nich są zwracane przy pomocy argumentów wskaźnikowych, jedna normalnie, jako wartość funkcji.
Linie 24-26 zamieniają wartości. Efekt zamiany wypisywany jest w linii 27. Wykonanie programu wraca do funkcji wywołującej (w tym wypadku main()). W linii 14 ponownie wypisywane są wartości zmiennych. Ponieważ były one przekazane do funkcji Zamień () przez referencje, dlatego również zostały zamienione wartościami.
Referencje dają możliwość wygodnego zarządzania normalnymi zmiennymi z jednoczesnym udostępnieniem narzędzi oferowanych przez wskaźniki.
Listing 11.7. zawiera implementację zmiennej Zamień() z wykorzystaniem wskaźników, listing 11.8 z wykorzystaniem referencji. Implementacja oparta o referencje jest łatwiejsza, kod jest prostszy do czytania. Skąd jednak funkcja wywołująca wie, czy wartości są przekazywane przez referencje czy przez wartość? Jako klient (lub użytkownik) funkcji Zamień(), programista musi zagwarantować, że funkcja faktycznie zamieni wartości parametrów.
Tutaj pojawia się kolejna funkcja prototypów. Poprzez analizę zadeklarowanych parametrów w prototypie, który zazwyczaj znajduje się w specjalnym pliku nagłówkowym wraz z innymi prototypami, programista dowiaduje się, że parametry przekazywane do funkcji zamień są przekazywane przez referencje, co w przypadku funkcji Zamień () oznacza, że zostaną one prawidłowo zamienione.
Gdyby funkcja Zamień () była wewnętrzną metodą jakiejś klasy, to deklaracja tej klasy, również zawarta w pliku nagłówkowym, dawała by wszystkie niezbędne programiście informacje o tej funkcji.
W C++ klienci i użytkownicy klas i funkcji opierają się jedynie na plikach nagłówkowych i z nich czerpią wszystkie niezbędne do programowania informacje. Implementacja jest przed klientem (użytkownikiem) ukryta. Takie rozwiązanie pozwala programiście od początku skupić się jedynie na problemie bez zagłębiania się w szczegóły implementacyjne wykorzystywanych klas.
Jak już mówiliśmy, każda funkcja, normalnie może zwrócić tylko jedną wartość. Co jednak zrobić, gdy musisz z funkcji zwrócić dwie wartości? Jedna z możliwości polega na przekazaniu do funkcji przez referencje dwóch roboczych obiektów. Funkcja może nadać im wymagane wartości. Przekazanie przez referencje gwarantuje, że przypisanie wartości nastąpi do obiektów oryginalnych, co umożliwi ich odczytanie. W efekcie uzyskujemy funkcję, która zwraca dwie wartości. Takie rozwiązanie pozwala na ominięcie normalnej wartości zwracanej przez funkcję, którą można w tym momencie wykorzystać np. do zwracania kodu błędu.
Problem zwracania wielu wartości można rozwiązać również z wykorzystaniem wskaźników. Listing 11.7. demonstruje funkcję zwracającą trzy wartości. Dwie z nich są zwracane przy pomocy argumentów wskaźnikowych, jedna normalnie, jako wartość funkcji.