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.