Funkcje
Funkcje stanowią podstawowy element programu w C++. Definicja funkcji ma następującą postać:
typ nazwa(lista_parametrów) {
lista_instrukcji
}
gdzie
- typ jest nazwą zwracanego przez funkcję typu,
- nazwa jest nazwą funkcji,
- lista_parametrów ma postać
typ_1 nazwa_1, typ_2 nazwa_2, ...,typ_n nazwa_n
i zawiera informację o typach i nazwach parametrów (może być pusta),
- lista_instrukcji jest wykonywana po wywołaniu funkcji.
Dozwolone są również deklaracje funkcji:
typ nazwa(lista_parametrów);
Zawierają one jedynie informację, że nazwa jest nazwą funkcji (o zadanym typie i liście parametrów).
Definicja funkcji powinna być podana później.
Przykłady:
void a();
funkcja o nazwie a, która nie ma parametrów i nie zwraca żadnej wartości.
int qqq();
funkcja o nazwie qqq bez parametrów, zwracająca wartość typu int.
double x(int a, char c, double tt);
funkcja o nazwie x, zwracająca wartość typu double. Wymaga trzech parametrów: pierwszego typu int,
drugiego typu char, a trzeciego typu double.
Wywołanie funkcji
Każdą funkcję można wywołać przez
nazwa_funkcji(wartość_1, wartość_2, ...,wartość_n);
Wywołanie funkcji ma następujący efekt:
- Wartości podane przy wywołaniu są kopiowane na zmienne nazwa_1, nazwa_2, itd.
- Wykonywana jest lista_instrukcji,
- W przypadku napotkania instrukcji return (w przypadku funkcji nie zwracających wartości, tj. typu void) lub
return wartość; wykonanie funkcji się kończy i program wraca do punktu wywołania.
- Wartością wyrażenia nazwa_funkcji(wartość_1, wartość_2, ...,wartość_n);
jest wartość użyta przy instrukcji return.
Uwagi:
- Jeśli funkcja zwraca wartość, jej wykonanie musi zostać zakończone przez return .
- Nazwy parametrów funkcji nie są istotne podczas jej wywołania; istotne jest tylko, żeby ich ilość i typy były zgodne z definicją.
Przykłady wywołań funkcji
a();
n=qqq();
y=21.3*x(a, 'W', z/1.5);
Typy referencyjne
Wartością zmiennej typu referencyjnego (referencji) nie są dane, ale inna zmienna. Można ją traktować jak inną nazwą dla zmiennej już istniejącej.
Typ referencyjny ma postać T&, gdzie T jest typem wskazywanym, np. int& oznacza referencję do zmiennej typu int.
Każda referencja musi być zainicjowana w miejscu deklaracji, np. deklaracja
int a;
int& b=a;
jest poprawna, a
int& b;
nie jest.
Przykład.
int a=2;
int& b=a; // a==2, b==2
a=a+1; // a==3, b==3
b=b-2; // a==1, b==1
Podstawowym zastosowaniem referencji jest
Przekazanie parametru przez zmienną
Jeśli parametr funkcji jest typu referencyjnego, to w funkcji nie tworzy się kopia zmiennej - rachunki wykonywane
są na podanym argumencie.
Kiedy używać referencji?
- Kiedy funkcja ma zmieniać wartość zmiennej.
- Kiedy nie da się stworzyć kopii parametru lub jest to zbyt kosztowne
- Kiedy funkcja ma zwracać więcej niż jedną wartość (choć zwykle lepiej jest wtedy użyć struktur)