Funkcje w C++ cz. I
Funkcja w programowaniu to pewien blok kodu, który wykonuje określone zadanie i zwraca bądź też nie jakąś konkretną daną określonego wcześniej typu (np. int, double czy string). Dzięki funkcją program możemy podzielić na kilka mniejszych bloków kodu, które następnie łatwiej jest rozwijać, a co najważniejsze dany fragment możemy używać z różnymi danymi dowolną ilość razy nie przepisując go ponownie.
Należy tutaj zwrócić uwagę iż funkcją jest main, w którym w poprzednich artykułach wpisywaliśmy cały kod naszej aplikacji. Teraz przejdziemy trochę dalej. Przyjrzyjmy się więc przykładowej funkcji w C++, która może wyglądać tak:
typDanejKtoraChcemyZwrocic nazwaFunkcji(typArgumentu1 nazwaArgumentu1)
{
jakisKod
}Natomiast przykładowy program korzystający z funkcji obliczającej pole kwadratu tak:
#include <iostream>
using namespace std;
int poleKwadratu(int a) //funkcja poleKwadratu zwracająca wartość typu int
{
return a * a; //zwróć a * a
// return a, b; to jest błędem ponieważ możemy zwracać tylko jedną zmienną, jest kilka sztuczek, które obchodzą to ograniczenie, ale o nich będę pisał w II części tego artykułu
}
int main() //funkcja main zwracająca wartość typu int
{
int pole = poleKwadratu(5); //oblicza pole kawadratu o boku 5
cout << pole; //wypisze 25
return 0; //zwracamy 0 czyli wartość typu int
}Oczywiście możemy napisać również funkcję, która nie zwraca żadnej danej na przykład:
#include <iostream>
using namespace std;
void pole(int a, int b) //funkcja pole która ma typ void czyli nie zwraca nic
{
b = a * a;
}
int main()
{
pole(5, 0);
// cout << b; to jest błędem, ponieważ zmienna b nie jest zadeklarowana
return 0;
}Przy funkcjach należy zwrócić jeszcze jedną uwagę na argumenty. Mianowicie kiedy podajemy je do funkcji to tak naprawdę kompilator robi sobie kopię wskazanych przez nas zmiennych oblicza co ma obliczyć i zwraca bądź też nie jakąś daną. Jeżeli funkcja zmodyfikuje liczbę (na przykład pomnoży 5 przez 2) w dowolnej zmiennej to ta zmodyfikowana liczba będzie dostępna tylko do momentu kiedy dana funkcja nie zakończy działania. Zróbmy mały eksperyment:
#include <iostream>
using namespace std;
int c = 4;
int pole(int a, int b)
{
c = 2 * b; //do c przypisz 2 * b czyli 2 * 4 = 8
return a * a;
}
int main()
{
pole(5, 4);
cout << c; //zamiast 8 mamy dalej 4
return 0;
}Oczywiście to również można obejść stosując tak zwane wskaźniki, ale o tym będę pisał w II części tego artykułu.
Fot: marissa, Flickr | CC.