Poznaj C++ w$ godziny0079

Poznaj C++ w$ godziny0079



Funkcje 65

Funkcje jako parametry innych funkcji

Mimo że można używać funkcji zwracających wartości jako parametry do innych funkcji, to nie polecamy tego rozwiązania, gdyż prowadzi ono do zbędnego komplikowania kodu.

Jako przykład, załóżmy, że mamy funkcje RazyDwa(), RazyTrzyO, Kwadrat() i Sześcian (), z których każda zwraca wartość. Możesz napisać:

Odpowiedz = (RazyDwa(RazyTrzy(Kwadrat(Sześcian(MojaWartosc)))));

Ta instrukcja pobiera zmienną Mo jaWartosc, przekazuje ją jako argument do funkcji Sześcian (), zwracającą wartość przekazywaną z kolei od funkcji Kwadrat(), której wynik przekazywany jest do funkcji RazyTrzy () na rezultacie której operuje funkcja RazyDwa (). Wynik tego podwajania, potrajania i potęgowania podstawiany jest do zmiennej Odpowiedz.

Trudno na pierwszy rzut okna powiedzieć co ta instrukcja robi (czy wartość była podnoszona do sześcianu zanim była podwojona czy nie?). Również w momencie uzyskania wyniku niezgodnego z oczekiwaniami trudno będzie znaleźć miejsce popełnienia błędu.

Alternatywnym rozwiązaniem jest przypisanie każdego kroku do osobnych zmiennych:

// Przez5 = 8 // Przez4 = 64 // Przez3 = 192 // Przez2 = 384


unsigned long MojaWartosc = 2; unsigned long Potega3 = Sześcian(MojaWartosc); unsigned long Potega2 = Kwadrat(Potega3); unsigned long Przez3 = RazyTrzy(Potega2); unsigned long Przez2 = RazyDwa(Przez3);

Teraz każda pośrednia wartość może zostać przeanalizowana. Jasna jest również kolejność wykonywania operacji.

Parametry są zmiennymi lokalnymi

Argumenty przekazywane do funkcji są w niej lokalne. Zmiana ich wartości jest również lokalna i nie jest widoczna w funkcji wywołującej. Nazywamy to przekazywaniem przez wartość, co oznacza, że w funkcji tworzona jest lokalna kopia każdego argumentu przekazywanego do tej funkcji. Takie kopie są traktowane tak, jak lokalne zmienne. Listing 5.3. ilustruje ten mechanizm.

Funkcje jako parametry innych funkcji

Mimo że można używać funkcji zwracających wartości jako parametry do innych funkcji, to nie polecamy tego rozwiązania, gdyż prowadzi ono do zbędnego komplikowania kodu.

Jako przykład, załóżmy, że mamy funkcje RazyDwa (), RazyTrzy(), Kwadrat () i Sześcian (), z których każda zwraca wartość. Możesz napisać:

Odpowiedz = (RazyDwa(RazyTrzy(Kwadrat(Sześcian(MojaWartosc)))));

Ta instrukcja pobiera zmienną MojaWartosc, przekazuje ją jako argument do funkcji Sześcian (), zwracającą wartość przekazywaną z kolei od funkcji KwadratO, której wynik przekazywany jest do funkcji RazyTrzy () na rezultacie której operuje funkcja RazyDwa (). Wynik tego podwajania, potrajania i potęgowania podstawiany jest do zmiennej Odpowiedz.

Trudno na pierwszy rzut okna powiedzieć co ta instrukcja robi (czy wartość była podnoszona do sześcianu zanim była podwojona czy nie?). Również w momencie uzyskania wyniku niezgodnego z oczekiwaniami trudno będzie znaleźć miejsce popełnienia błędu.

Alternatywnym rozwiązaniem jest przypisanie każdego kroku do osobnych zmiennych:

// Przez5 = 8 // Przez4 = 64 // Przez3 = 192 // Przez2 = 384


unsigned long MojaWartosc = 2; unsigned long Potega3 = Sześcian(MojaWartosc); unsigned long Potega2 = Kwadrat(Potega3); unsigned long Przez3 = RazyTrzy(Potega2); unsigned long Przez2 = RazyDwa(Przez3);

Teraz każda pośrednia wartość może zostać przeanalizowana. Jasna jest również kolejność wykonywania operacji.

Parametry są zmiennymi lokalnymi

Argumenty przekazywane do funkcji są w niej lokalne. Zmiana ich wartości jest również lokalna i nie jest widoczna w funkcji wywołującej. Nazywamy to przekazywaniem przez wartość, co oznacza, że w funkcji tworzona jest lokalna kopia każdego argumentu przekazywanego do tej funkcji. Takie kopie są traktowane tak, jak lokalne zmienne. Listing 5.3. ilustruje ten mechanizm.


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0073 Funkcje 59Rysunek 5.2 Funkcje 59 Prototyp, pod względem typu wartości zwra
Poznaj C++ w$ godziny0083 Funkcje 69Parametry domyślne Do każdego zadeklarowanego w prototypie i def
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$ godziny0081 Funkcje 67 Program wraca do funkcji main(), do linii 13. Okazuje się, że w
Poznaj C++ w$ godziny0085 Funkcje 71Przeciążanie funkcji C++ pozwala na stworzenie więcej niż jednej
Poznaj C++ w$ godziny0087 Funkcje 73 27:    int RazyDwa(int zrodło) 28: { 29:  &
Poznaj C++ w$ godziny0089 Funkcje 75 Kiedy wartość jest odkładana na stos, to jest umieszczana w kom
skanuj0112 (20) 124 PHP i MySQL dla każdego Funkcja zwraca wartość określającą liczbę elementów w po
skanuj0218 (4) Rozdział 8. ♦ Cookies i sesje 231 Funkcja zwraca wartość true, jeżeli zmienna przekaz
Poznaj C++ w$ godziny0023 Zaczynamy 7 C++ to nie tylko lepsze C Prawdą jest, że C++ to rozbudowane C
IsNumeric: IsNiimeric(wyrażenie) - funkcja zwraca wartość Tnie, jeśli argument jest liczbą a w przec
IX. Podprogramy. (4 godz) 1.    funkcje (zwracanie wartości) 2.
ANSI C 4 DODATEK A PRZEWODNIK JĘZYKA C ____—-- stropy jest funkcją zwracającą wartość całkowitą i
40297 skanuj0112 (20) 124 PHP i MySQL dla każdego Funkcja zwraca wartość określającą liczbę elementó

więcej podobnych podstron