[ Pobierz całość w formacie PDF ]
wywołaniem funkcji musimy podać jej prototyp; zwykle robi się to ponad definicją funkcji
main(). Tym razem jednak musimy także podać kod zródłowy nowej funkcji. Najprostszym
sposobem jest umieszczenie tego kodu w tym samym pliku, po kodzie funkcji main(). Pokaza-
no to na listingu 2.5.
Listing 2.5. ourfunc.cpp
// ourfunc.cpp definiujemy własną funkcję
#include
void simon(int); // prototyp funkcji simon()
int main()
{
using namespace std;
simon(3); // wywołanie funkcji simon()
cout
int count;
cin >> count;
simon(count); // wywołaj ponownie
cout
return 0;
}
void simon(int n) // definicja funkcji simon()
{
using namespace std;
cout
} // funkcja typu void nie ma instrukcji return
Funkcja main() wywołuje funkcję simon() dwukrotnie: raz z parametrem 3 i raz ze zmienną
count jako parametrem. W międzyczasie użytkownik podaje liczbę całkowitą, która jest przy-
pisywana zmiennej count. W tym przykładzie nie używamy znaku nowego wiersza po pokaza-
niu żądania wprowadzenia nowej wartości, więc dane wprowadzone przez użytkownika są w tym
samym wierszu co prośba o ich wprowadzenie. Oto przykładowy wynik wykonania programu
z listingu 2.5:
Simon prosi, abyś dotknął palców u stóp 3 razy.
Podaj liczbę całkowitą: 512
Simon prosi, abyś dotknął palców u stóp 512 razy.
Gotowe!
56
Postaæ funkcji
Definicja funkcji simon() z listingu 2.5 ma tę samą postać co definicja funkcji main(). Naj-
pierw mamy nagłówek funkcji, a potem nawiasy klamrowe, w których zawarta jest treść funkcji.
Zatem definicję funkcji możemy uogólnić następująco:
typ nazwafunkcji(listaparametrów)
{
instrukcje
}
Zauważmy, że kod zródłowy z definicją funkcji simon() znajduje się za zamykającym nawia-
sem klamrowym funkcji main(). Podobnie jak w C, a w przeciwieństwie do Pascala, w C++
nie można zagnieżdżać definicji jednej funkcji w innej. Każda definicja funkcji jest niezależna
od pozostałych i wszystkie funkcje są sobie równe (rysunek 2.8).
Rysunek 2.8. Definicje funkcji znajduj¹ce siê w pliku
Nag³Ã³wki funkcji
Funkcja simon() z listingu 2.5 ma nagłówek:
void simon(int n)
Początkowe słowo void oznacza, że simon() nie zwraca żadnej wartości. Zatem wywołanie
funkcji simon() nie wygeneruje żadnej liczby, którą można byłoby przypisać zmiennej w funk-
cji main(). Dlatego właśnie pierwsze wywołanie wygląda tak:
simon(3); // prawidłowo dla funkcji typu void
57
Rozdzia³ 2 - Pierwszy program w C++
Funkcja simon() nie zwraca żadnej wartości, więc nie można jej wywołać tak:
simple = simon(3); // w przypadku funkcji typu void niedopuszczalne
Podawana w nawiasach wartość int n oznacza, że oczekujemy, że funkcja simon() pobierze
jeden parametr typu int. n to nowa zmienna, której jest przypisywana wartość przekazana
podczas wywołania funkcji. Zatem wywołanie:
simon(3);
powoduje przypisanie zmiennej n zdefiniowanej w nagłówku funkcji simon() wartości 3. Kiedy
instrukcja z cout znajdująca się w treści funkcji użyje n, użyje tak naprawdę wartości przeka-
zanej do funkcji. Dlatego właśnie wywołanie simon(3) powoduje wyświetlenie w wyniku trójki.
Wywołanie simon(count) w pokazanym przykładzie powoduje wyświetlenie 512, gdyż taką
wartość nadano zmiennej count. Podsumowując, nagłówek funkcji simon() informuje nas,
że funkcja ta ma jeden parametr typu int i nie ma wartości zwracanej.
Spójrzmy teraz na nagłówek funkcji main():
int main()
Początkowe int oznacza, że main() zwraca liczbę całkowitą. Puste nawiasy (lub opcjonalnie
zawierające słowo kluczowe void) wskazują, że funkcja nie ma parametrów. Funkcje mające
wartość zwracaną powinny mieć we wnętrzu słowo kluczowe return ze zwracaną wartością.
Dlatego właśnie pod koniec tej funkcji mamy:
return 0;
Jest to logiczne funkcja main() ma zwrócić wartość typu int, więc zwraca 0. Ale gdzie
właściwie ta wartość jest zwrócona? Przecież w programach wywołanie main() nie występuje:
sprawdzmy = main(); // nie występuje w programach
Naszą funkcję main() wywołuje system operacyjny (na przykład Unix czy DOS), więc funkcja
main() zwraca wartość nie do żadnej innej części programu, ale do systemu operacyjnego.
Wiele systemów potrafi taką wartość wykorzystać. Na przykład skrypty powłoki Unix i pliki
[ Pobierz całość w formacie PDF ]