typ mojaFunkcja() {
// kod funkcji do wykonania
}
gdzie:
Funkcje w C++ możemy tworzyć na kilka sposobów:
Między bibliotekami a funkcją main().
Wszystkie definicje funkcji wraz z ich instrukcjami tworzymy przed główną funkcją main()
#include <iostream>
using namespace std;
//definicja funkcji wraz z jej ciałem
typ_funkcji nazwa_funkcji(lista argumentów)
{
//ciało funkcji
return wartość;
}
int main()
{
//instrukcje funkcji main
return 0;
}
Deklaracje prototypów (typów, nazw) funkcji umieszczamy przed główną funkcją main()
Definicje funkcji umieszczamy pod główną funkcją main()
Taki sposób tworzenia funkcji jest wygodny, w przypadku dużej ich ilości.
#include <iostream>
using namespace std;
//definicja funkcji wraz z jej ciałem
//przy tworzeniu prototypów wstawiamy
//średnik na końcu funkcji
typ_funkcji1 nazwa_funkcji(lista argumentów);
typ_funkcji2 nazwa_funkcji_drugiej(lista argumentów);
...
int main()
{
//instrukcje funkcji main
return 0;
}
//implementacje funkcji zadeklarowanych powyżej
typ_funkcji1 nazwa_funkcji(lista argumentów)
{
//instrukcje funkcji
return wartość;
}
//implementacja funkcji zadeklarowanej powyżej
typ_funkcji2 nazwa_funkcji_drugiej(lista argumentów)
{
//instrukcje funkcji
return wartość;
}
Aby wywołać funkcję w C++, należy podać jej nazwę oraz argumenty (jeśli takie posiada), zwracając uwagę, na zgodność typów argumentów:
jeśli funkcja o nazwie "f" pobiera następujące typy f(int a, char b), oznacza to, że przy uruchomieniu tej funkcji pierwszym argumentem musi być liczba typu int, a drugim argumentem musi być znak np.:
//wywołanie funkcji f
f(123,'a');
lub
int a = 3;
char znak = 'p';
//wywołanie funkcji f
f(a,znak);
Funkcje niezwracające wartości wywołujemy podając tylko ich nazwę, natomiast funkcje z wartością zwrotną przypisujemy do odpowiednich zmiennych lub kierujemy na wyjście do pliku lub na ekran (wypisujemy wynik na ekranie).
Podprogramy (funkcje) możemy wywoływać w głównej funkcji main() lub z wnętrza innych funkcji, metod, itd..
Przeanalizujmy przykłady:
Stworzymy dwie funkcje:
#include <iostream>
using namespace std;
void sumaA(int a, int b)
{
cout<<"Suma liczb "<<a<<" i "<<b<<" wynosi: "<<a+b<<endl;
}
int sumaB(int a,int b)
{
return a+b;
}
int main()
{
setlocale(LC_CTYPE, ".1250"); // polskie litery
//wywołanie funkcji typu void - bez zwróconej wartosci
sumaA(2,3);
//wywołanie funkcji z informacją zwrotna zapisaną w zmiennej suma
int suma = sumaB(3,6);
cout<<"Suma liczb 3 i 6 wynosi: "<<suma<<endl;
return 0;
}
Stworzymy dwie funkcje:
sposobami omówionymi powyżej.
#include <iostream>
using namespace std;
float max(float a,float b)
{
if(a>b)
return a;
return b;
}
void hello()
{
cout<<"Witaj programisto!!!";
}
int main()
{
setlocale(LC_CTYPE, ".1250"); // polskie litery
//wywołanie funkcji max
cout<<"Wartość maksymalna z liczb 5.2 i 7.3 wynosi: "<<max(5.2, 7.3)<<endl;
//wywołanie funkcji hello
hello();
cout<<endl;
return 0;
}
#include <iostream>
using namespace std;
//definicja prototypów funkcji max i hello
//zauważmy, że wystarczy podać typy argumentów bez ich nazw
float max(float, float);
void hello();
int main()
{
setlocale(LC_CTYPE, ".1250"); // polskie litery
//wywołanie funkcji max
cout<<"Wartość maksymalna z liczb 5.2 i 7.3 wynosi: "<<max(5.2, 7.3)<<endl;
//wywołanie funkcji hello
hello();
cout<<endl;
return 0;
}
//pełne definicje funkcji
float max(float a, float b)
{
if(a>b)
return a;
else
return b;
}
void hello()
{
cout<<"Witaj programisto!!!";
}