Istnieje wiele różnych sposobów myślenia o funkcjach. Najmniej ścisłym, ale również najprostszym do zrozumienia jest traktowanie funkcji w C++ jako czarne pudełka.
Pudełko takie byłoby podobne do zabawek dla dzieci – można do nich włożyć jakieś plastikowe elementy o określonym kształcie (gwiazdki, trójkąta, kwadratu i innych), natomiast byłoby o tyle wyjątkowe, że może również wyprodukować jeden element określonego kształtu.
Istotą takiego pudełka-funkcji jest wykonywanie jakiegoś zadania, stąd też w szczególnym przypadku może niczego do środka nie przyjmować, ani niczego nie zwracać – może przykładowo po prostu spowodować zapalenie się diody, gdy jej użyjemy.
W ujęciu bardziej ścisłym mówimy, że funkcja może przyjmować argumenty oraz zwrócić jakąś wartość. Zadaniem programisty jest określenie czy i ile argumentów będzie przyjmować jego funkcja, jakie to będą argumenty, oraz jakiego rodzaju będzie to, co wyprodukuje (zwróci) jego funkcja.
Funkcje w C++ zawsze są tworzone według niniejszego schematu (chociaż może on być rozszerzany):
<typ zwracany> nazwa_funkcji ( <typ argumentu 1> argument1, <typ 2> argument2, …)
{
//tutaj występują różne operacje
return <zmienna>; //opcjonalnie
}
1. Funkcja, która przyjmuje dwa argumenty (obydwa typu int) oraz zwraca wynik ich dodawania:
int dodawanie(int a, int b)
{
return a+b;
}
2. Funkcja, która nie przyjmuje, ani nie zwraca żadnych argumentów, tylko wypisuje tekst:
void napisz()
{
std::cout << „Wywołano funkcję” << std::endl;
}
3. Funkcja, która przyjmuje jakąś wartość, mnoży ją przez 2, a następnie wypisuje, nie zwracając żadnej wartości:
void wypiszIloczyn(int x)
{
int y;
y = x*2;
std::cout << y;
}