Twoje Centrum Szkoleniowe

Nauczmy się dziś czegoś nowego!

Kurs programowania - C++

C++: Tworzenie i wywoływanie funkcji

Funkcje w C++ pozwalają na modularne i zorganizowane podejście do programowania, ułatwiając tym samym zarządzanie kodem i jego ponowne wykorzystanie.

Funkcja w C++ to wydzielony blok kodu, który wykonuje określone zadanie. Może przyjmować dane wejściowe w postaci argumentów, przetwarzać te dane i zwracać wynik. Funkcje umożliwiają tworzenie kodu, który jest łatwiejszy w utrzymaniu, testowaniu i debugowaniu, ponieważ każda funkcja może być rozwijana i testowana niezależnie od innych części programu.

 

Definiowanie funkcji

typ_zwracanej_wartości nazwa_funkcji (parametry_wejściowe_funkcji){
    instrukcje;
}

 

Funkcja w C++ jest zdefiniowana z użyciem określonej składni, która obejmuje typ zwracany, nazwę funkcji, listę parametrów (może być pusta) oraz ciało funkcji zawarte w nawiasach klamrowych.

Nazwa funkcji: Nazwa funkcji powinna być opisowa i odzwierciedlać to, co funkcja wykonuje. Należy stosować konwencje nazewnictwa, które są spójne w całym projekcie.

Ciało funkcji: Ciało funkcji zawiera kod, który jest wykonywany, gdy funkcja jest wywoływana. Może zawierać deklaracje zmiennych, instrukcje sterujące, wywołania innych funkcji oraz instrukcję return, która kończy wykonanie funkcji i opcjonalnie zwraca wartość.

 

Przejdźmy do przykładu:

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

Funkcja o nazwie dodaj przyjmuje 2 parametry wejściowe, a oraz b, które są liczbami całkowitymi. Funkcja zwraca wynik dodania do siebie wartości parametrów wejściowych. Funcja zwraca wynik swojego działania dzięki instrukcji return, po której następuje zwracana wartość. Typ tej wartości zapisany jest natomiast przed nazwą funkcji. Funkcja ma zwrócić wynik dodawania liczb całkowitych - czyli również liczbę całkowitą. Stąd int przed nazwą funkcji.

 

Wywołanie funkcji

Aby wywołać funkcję, należy użyć jej nazwy wraz z odpowiednimi argumentami (jeśli funkcja wymaga parametrów) w miejscu, gdzie chcemy, aby została wykonana.

 

Przykład wywołania wcześniej zdefiniowanej funkcji dodaj:

int wynik = dodaj(5, 3);

 

Funkcja dodaj oczekiwała 2 parametrów wejściowych, liczb całkowitych. Przekazaliśmy zatem do niej liczby 5 oraz 3. Wiemy, że funkcja zwróci wartość oraz że będze to liczba całkowita. Aby móc coś z tym zwróconym wynikiem dalej zrobić, zapisaliśmy go sobie do zmiennej typu int, wynik.

 

Miejsce wywołania: Funkcje można wywoływać z różnych miejsc w kodzie, w zależności od ich zasięgu. Najczęściej funkcje wywoływane są z innych funkcji, w tym z funkcji main(), która jest punktem startowym każdego programu w C++.

 

Połączmy naszą utworzoną funkcję dodaj oraz jej wywołanie.

#include <iostream>

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

int main() {
    
    int wynik = dodaj(5, 3);
    std::cout << "Zwrócony przez funkcję wynik dodawania: " << wynik;

    return 0;
}

 

Przeanalizujmy sobie ten kod. Wiemy, że będziemy coś wypisywać na ekran, dołączamy zatem bibliotekę iostream.

Następnie definiujemy funkcję dodaj, która przyjmie 2 parametry wejściowe - liczby całkowite a oraz b, obliczy, następnie zwróci ich sumę. To co zwróci będzie liczbą całkowitą.

Przechodzimy do głównej funkcji, main, a w niej wywołujemy naszą funkcję dodaj, z parametrami 5 oraz 3. Wynik działania funkcji zapisujemy w zmiennej wynik typu całkowitoliczbowego.

Na koniec zawartość zmiennej wynik wypisujemy na ekran.

 

To główne kwestie, które chciałem omówić na tej lekcji, gdyż argumenty przekazywane do funkcji i zwracane przez funkcję, różnicę pomiędzy funkcją a procedurą czy rekurencyjne wywołanie funkcji omówimy sobie w kolejnych tematach, jednak rozszerzymy tę lekcję o jeszcze jedną kwestię - inne sposoby deklaracji funkcji.

Sposób widoczny w ostatnim przykładzie jest najpowszechniejszy i zarazem najczęściej go będziesz używać. Natomiast nie oznacza to, że jest to sposób jedyny.

Spróbujmy oddzielić od siebie deklarację oraz definicję funkcji, umieszczając deklarację przed funkcją main, a definicję za nią. Dlaczego tak można zrobić? Pozwala to na czytelniejsze zorganizowanie kodu, zwłaszcza przy wielu funkcjach.

 

Zobaczmy to na naszym zmodyfikowanym przykładzie:

#include <iostream>

int dodaj(int a, int b);

int main() {
    int wynik = dodaj(5, 3);
    std::cout << "Zwrócony przez funkcję wynik dodawania: " << wynik;

    return 0;
}

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

Jak widzisz, przed main pozostała sama deklaracja funkcji, bez jej ciała, czyli jakichkolwiek instrukcji jakie wykonuje. Pozostała tu jedynie informacja o typie i ilości parametrów wejściowych oraz typie zwracanym przez funkcję.

 

Plik nagłówkowy (.h)

No i został nam ostatni sposób, a mianowicie przeniesienie naszej funkcji do odrębnego pliku.

W dużych projektach, gdzie funkcje są często wykorzystywane w różnych plikach, praktykuje się deklarowanie funkcji w plikach nagłówkowych (.h), a ich wywołanie znajduje się w osobnych plikach źródłowych (.cpp).

 

Dodanie pliku nagłówkowego do projektu

1. Widok projektu przed dodaniem pliku nagłówkowego

 

2. Prawy przycisk myszy na Pliki źródłowe, następnie Dodaj -> Moduł.

 

3. Wybierz plik nagłówka (.h) oraz nadaj mu nazwę

 

4. Widok plików projektu po dodaniu pliku nagłówkowego

 

Przejdźmy zatem do zmiany zawartości naszego głównego pliku projektu oraz uzupełnienie nowego pliku dla przechowywania funkcji.

 

Plik glowny.cpp:

#include <iostream>
#include "moje_funkcje.h"

int main() {

    int wynik = dodaj(5, 3);
    std::cout << "Zwrócony przez funkcję wynik dodawania: " << wynik;

    return 0;
}

 

Jak widzisz, usunęliśmy z głównego pliku projektu naszą funkcję dodaj(). Dopisaliśmy za to instrukcję, która dołączy nam nasz plik nagłówkowy: moje_funkcje.h.

 

Przejdźmy do zawartości pliku moje_funkcje.h:

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

 

Tak, to cała zawartość pliku. Przechowujemy tu definicję naszej funkcji.

Dzięki temu podejściu, inne pliki źródłowe, które potrzebują użyć funkcji dodaj(), muszą jedynie dołączyć plik nagłówkowy moje_funkcje.h, co ułatwia organizację i zarządzanie kodem w projekcie.

 

 

Testy przypięte do lekcji
Aby uzyskać dostęp do testów i ćwiczeń interaktywnych - Zaloguj się
Aby widzieć ocenę lekcji - Zaloguj się