[ Pobierz całość w formacie PDF ]
wartości, nazywane kodami wyjścia. Typowo przyjmuje się, że zerowy kod wyjścia oznacza pra-
widłowe działanie programu, zaś wartość niezerowa oznacza jakiś błąd. Można zatem zdefinio-
wać program C++ tak, aby zwracał niezerową wartość, jeśli na przykład nie uda mu się otworzyć
pliku. Można pózniej zbudować skrypt powłoki lub plik wsadowy, który uruchomi program i po-
dejmie środki zaradcze w przypadku pojawienia się błędu.
S³owa kluczowe
S³owa kluczowe to s³ownik jêzyka komputerowego. W niniejszym rozdziale u¿yliSmy czte-
rech s³Ã³w kluczowych C++: int, void, return oraz double. S³owa te maj¹ dla kompi-
latora C++ specjalne znaczenie, wiêc nie nale¿y u¿ywaæ ich do niczego innego. Nie mo¿na
zatem u¿yæ return jako nazwy zmiennej, a double jako nazwy funkcji. Mo¿na jednak
oczywiScie u¿ywaæ nazw zawieraj¹cych s³owa kluczowe, jak inteligencja (gdzie za-
szyte jest s³owo int) czy return_of_the_king. W dodatku B podano pe³n¹ listê
58
Funkcje
s³Ã³w kluczowych C++. S³owo main nie jest s³owem kluczowym, gdy¿ nie jest to czêSæ jêzyka,
ale nazwa funkcji obowi¹zkowej. Mo¿na zatem zdefiniowaæ zmienn¹ o nazwie main (choæ
w pewnych, doSæ wyj¹tkowych, sytuacjach mo¿e to spowodowaæ k³opoty, wiêc lepiej tak zmien-
nych nie nazywaæ). Tak samo inne nazwy funkcji i obiektów nie s¹ s³owami kluczowymi, ale
u¿ycie na przyk³ad s³owa cout do nazwania obiektu i zmiennej bêdzie powodem nieporozu-
mieñ. Mo¿na u¿yæ cout jako nazwy zmiennej w funkcji, która nie u¿ywa obiektu cout, ale
w tej samej funkcji nie mo¿na bêdzie u¿yæ ju¿ zwyk³ego cout.
Funkcje u¿ytkownika zwracaj¹ce wartoSæ
Teraz pójdzmy krok dalej i napiszmy funkcję mającą instrukcję return. Funkcja main() po-
kazała nam już, jak to zrobić: podajemy w nagłówku typ zwracanej wartości, a w treści funkcji
używamy instrukcji return. Tego typu konstrukcji możemy użyć do rozwiązania problemu
wielu gości przebywających w Wielkiej Brytanii wiele wag łazienkowych wyskalowanych
jest tam w kamieniach zamiast w amerykańskich funtach czy międzynarodowych kilogramach.
Jeden kamień to 14 funtów (niecałe 6,5 kg); program z listingu 2.6 zawiera funkcję zamieniającą
kamienie na funty.
Listing 2.6. convert.cpp
// convert.cpp zamiana kamieni na funty
#include
int stonetolb(int); // prototyp funkcji
int main()
{
using namespace std;
int stone;
cout
cin >> stone;
int pounds = stonetolb(stone);
cout
cout
return 0;
}
int stonetolb(int sts)
{
return 14 * sts;
}
Oto przykład uruchomienia programu z listingu 2.6:
Podaj wagÄ™ w kamieniach: 14
14 kamieni = 196 funtów.
W funkcji main() program wykorzystuje obiekt cin do wczytania wartości zmiennej całkowi-
toliczbowej stone. Wartość ta jest przekazywana do funkcji stonetolb() jako parametr,
59
Rozdzia³ 2 - Pierwszy program w C++
a w tej funkcji jest przypisywana zmiennej sts. Dzięki temu widać, że return nie musi ogra-
niczać się do przekazywania gotowej liczby. W tym wypadku, kiedy mamy bardziej złożone wy-
rażenie, unikamy konieczności tworzenia nowej zmiennej na wynik, który zwrócimy. Program
wylicza wartość wyrażenia (w tym przykładzie 196) i zwraca tę wartość. Jeśli ktoś nie chce mieć
takich skrótów, może zrobić wszystko po kolei:
int stonetolb(int sts)
{
int pounds = 14 * sts;
return pounds;
}
Obie wersje funkcji działają tak samo, tyle że druga jest nieco dłuższa.
Tak w ogóle funkcji zwracającej wartość można użyć wszędzie tam, gdzie można byłoby użyć
stałej danego typu. Na przykład funkcja stonetolb() zwraca wartość typu int, więc można
byłoby użyć jej następująco:
int aunt = stonetolb(20);
int aunts = aunt + stonetolb(10);
cout
endl;
W tym wypadku program wylicza wartość zwracaną, a następnie z wartości tej korzysta w wyra-
żeniach.
Jak widać w pokazanych przykładach, prototyp funkcji opisuje jej interfejs, czyli sposób interak-
cji funkcji z resztą programu. Lista parametrów pokazuje, jakie informacje przechodzą do funk-
cji; typ funkcji mówi, co funkcja zwraca. Czasami programiści opisują funkcje jako czarne skrzynki
(termin pochodzi z elektroniki) w pełni opisane przez przepływ informacji do nich i z nich. Prototyp
funkcji dokładnie opisuje taki właśnie sposób interpretacji (rysunek 2.9).
Rysunek 2.9. Prototyp funkcji i funkcja jako czarna skrzynka
60
Funkcje
[ Pobierz całość w formacie PDF ]