Funkcje

Funkcje są to zbory pojedynczych wyrażeń wywoływane jednym poleceniem.
Przed wykorzystaniem funkcji musimy być pewni że została ona zdeklarowana, lub zdefiniowana. Może ona być zdefiniowana w jakimś pliku nagłówkowym, ale C++ umożliwia nam tworzenie własnych funkcji.

Definiujemy funkcje w następujący sposób:

typ zmiennej którą zwraca funkcja nazwa funkcji(typy zmiennych wprowadzonych z zewnątrz)
{

   /* ciało funkcji, czyli operacje które zostaną wykonane po wywołaniu funkcji
przez program */
}

W bloku definiującym ciało funkcji (to między cudzysłowami) musi wystąpić instrukcja return jeżeli funkcja zwraca wartość, a po niej wartość. nie jest to konieczne gdy funkcja zwraca wartość typu void (jest typu void), bo w tedy funkcja nie zwraca wartości. Chociaż też nie zawsze, ale o tym może kiedyś indziej
Na przykład funkcja zdefiniowana w ten sposób:

int dodaj(int a, int b)
{
   return a+b;
}

Jeżeli zostanie wywołana w programie zawsze zwróci nam sumę dwóch liczb całkowitych. Tą funkcję wywołujemy w programie w ten sposób:

int liczba;
liczba=dodaj(5,10);

Definicja ciała każdej funkcji zaczyna się klamrą otwierającą { a zamyka się klamrą zamykającą }, czyli blok instrukcji. Po klamrze zamykającej definicję funkcji nie jest potrzebny średnik. Natomiast wywołując funkcję jest on niezbędny. Chyba że jest to wywołanie złożone typu:

if(funkcja1(funkcja2(zmienna1,zmienna2)))

Jeżeli funkcja nie zwraca wartości to podczas definicji używamy operatora void zamiast definicji rodzaju wartości którą zwraca zmienna. W tedy można używać return'a, ale bez parametru. Same: return;
Po wystąpieniu tej instrukcji funkcja po prostu kończy działanie.
Jeżeli nie potrzebujemy żadnych zmiennych do wykonania funkcji do deklarujemy ją w ten sposób (zakładam że funkcja zwróci wartość int ):
int funkcja(void)

Jeżeli po definicji funkcji nie ma nawiasów klamrowych to za ciał funkcji kompilator przyjmuje jedno wyrażenie znajdujące się zaraz po definicji funkcji. Czyli wszystko przed pierwszym średnikiem.

Kilka funkcji w jednym programie może mieć taką samą nazwę. Nazywa się to przeciążeniem funkcji. Podczas kompilowania, kompilator sam sobie wybiera funkcję która najbardziej pasuje w dane miejsce. Istnieje jeden warunek. Nie mogą one przyjmować takich samych parametrów. Muszą się one różnić albo typem prowadzanych zmiennych albo ich liczbą. Na przykład zdefiniujmy sobie funkcje które będą sumować liczby:

double dodaj (double a, double b)
{
   return a+b;
}

int dodaj (int a, int b)
{
   return a+b;
}
double dodaj (double a, double b, double c)
{
   return a+b+c;
}

Teraz możemy je wywoływać. Wszystkie funkcje różnią się typem lub liczbą wprowadzanych zmiennych. Rodzaj zwracanej zmiennej nie ma znaczenia. Tzn. jeżeli definicja dwóch funkcji różni się tylko rodzajem zwracanej wartości to jest to błąd i kompilator na pewno nam go zwróci.
Podczas wykonywania programu kompilator oceni i wybierze odpowiednią funkcję która będzie odpowiadała parametrom. Np wywołanie funkcji:

cout << dodaj(2,3);
wywoła nam funkcję która operuje na wartościach int, a wywołanie:
cout << dodaj(2,3,5);
wywoła nam funkcję sumującą 3 liczby a nie dwie.

plus.cpp
dodaj.cpp