8. Funkcje

8.1. Deklaracja i definicja funkcji

Jak już wspomniałem, rozróżnia się deklarację i definicję funkcji.

Deklaracja wygląda następująco:


< modyfikator > < typ_zwracany > < nazwa >( < typ1 > < arg1 >, < typ2 > < arg2 > <...> );

Definicje funkcji wyglądają bardzo podobnie, z tym że zamiast ; kończącego deklarację mamy nawiasy klamrowe { } zawierające "ciało" (ang. body) funkcji.


< modyfikator > < typ_zwracany > < nazwa >( < typ1 > < arg1 >, < typ2 > < arg2 > <...> ) {
  < instrukcja 1 >;
  < instrukcja 2 >;
  ...
  < instrukcja n >;
  return wartosc_zwracana;
}

W nagłówku funkcji występują następujące elementy:

  • modyfikator - opcjonalny modyfikator funkcji, omówię go nieco później.
  • typ_zwracany – typ wartości zwracanej przez funkcję, jeśli jej wywołanie zostało umieszczone w wyrażeniu. Wynik jest zwracany poprzez wywołanie instrukcji return z argumentem będącym zwracaną wartością. Jeśli funkcja nie zwraca żadnej wartości, typ zwracany należy zdefiniować jako void, i konsekwentnie return nie powinien mieć podanego żadnego argumentu lub argument typu void.
  • nazwa – identyfikator, przy użyciu którego będzie wywoływana funkcja . Wbrew pozorom, w C++ nazwa nie identyfikuje jednoznacznie funkcji. Poza nazwą do identyfikacji jest również wykorzystana lista typów argumentów, dzięki czemu możliwe jest opisane dalej przeciążanie nazw funkcji.
  • lista par: typ_argumentu nazwa_argumentu oddzielona przecinkami. Nazwa jest opcjonalna – nie musi występować w deklaracji bez jakichkolwiek konsekwencji, i nie musi też występować w definicji, tyle że wtedy taki argument nazywamy nienazwanym, i nie możemy go wykorzystywać w instrukcjach w ciele funkcji. Nazwa też nie musi się zgadzać w definicji i deklaracji, choć takie zachowanie świadczy o niechlujnym przygotowaniu kodu.
  • argumenty funkcji mogą mieć wartości domyślne (domniemane). Wartości te są wpisywane w deklaracji funkcji, przy czym argumenty domniemane muszą być podane na końcu listy. Przy wywołaniu funkcji można pominąć tylko argumenty z końca listy, które mają wartości domyślne.
  • Zapis (...) oznacza dowolną liczbę argumentów.