Ugrás a tartalomhoz

function definition

A Wikiszótárból, a nyitott szótárból


Főnév

function definition (tsz. function definitions)

  1. (informatika)

A C++ nyelvben a függvénydefiníció (function definition) azt jelenti, hogy egy függvény működését részletesen megadjuk. Ez magában foglalja: - a visszatérési típust, - a függvény nevét, - a paramétereket, - a függvény törzsét (a végrehajtandó utasításokat).



1. A függvények alapjai

Egy függvény szintaxisa a következő:

visszatérési_típus függvénynév(paraméterlista) {
    // Függvénytörzs: a végrehajtandó utasítások
    return érték; // (ha van visszatérési érték)
}

Példa egy egyszerű függvényre:

#include <iostream>

// Függvénydefiníció
int osszead(int a, int b) {
    return a + b;  // Két szám összeadása
}

int main() {
    int eredmeny = osszead(5, 7);
    std::cout << "Az összeg: " << eredmeny << std::endl;
    return 0;
}

📌 Magyarázat: - int osszead(int a, int b): A függvény neve osszead, és két int típusú paramétert vár. - return a + b;: A függvény visszaadja a két szám összegét. - A main() függvény hívja meg az osszead() függvényt, és kiírja az eredményt.



2. Függvénydeklaráció és definíció különválasztása

A C++ programokban gyakran különválasztjuk a függvénydeklarációt és a függvénydefiníciót. A deklaráció (function declaration vagy function prototype) megmondja a fordítónak, hogy milyen függvény létezik, míg a definíció (function definition) a tényleges működést tartalmazza.

📌 Példa:

#include <iostream>

// Függvénydeklaráció (csak a fejléce)
int osszead(int, int);

int main() {
    std::cout << "Az összeg: " << osszead(10, 20) << std::endl;
    return 0;
}

// Függvénydefiníció (a részletes működés)
int osszead(int a, int b) {
    return a + b;
}

🔹 Miért jó így? - Jobban szervezhető a kód. - A deklarációkat el lehet helyezni egy külön fejlécfájlban (.h), a definíciókat pedig egy külön forrásfájlban (.cpp). - Segít az olvashatóságban és a moduláris programozásban.



3. Függvények paraméterei

A függvények különböző módokon fogadhatnak paramétereket:

a) Érték szerinti átadás (pass by value)

A paraméterek másolásra kerülnek, így a függvény nem módosítja az eredeti változókat.

void novel(int szam) {
    szam++;  // Ez csak a másolt értéket módosítja, nem az eredetit
}

int main() {
    int x = 10;
    novel(x);
    std::cout << x; // 10, mert az eredeti változó nem változik
}

b) Referencia szerinti átadás (pass by reference)

A paraméterre hivatkozásként (reference) mutatunk, így a függvény módosíthatja az eredeti változót.

void novel(int &szam) {
    szam++;  // Az eredeti változó értéke is nő
}

int main() {
    int x = 10;
    novel(x);
    std::cout << x; // 11, mert a függvény módosította az eredeti értéket
}

c) Konstans referencia (const reference)

Ha egy paramétert referenciaként szeretnénk átadni, de nem akarjuk módosítani, használjunk const-ot.

void kiir(const std::string &szoveg) {
    std::cout << szoveg << std::endl;
}

🔹 Miért jó?
- Nagy objektumok (pl. stringek) másolását elkerüli, így gyorsabb.
- Garantálja, hogy a függvény nem módosítja az eredeti adatot.



4. Alapértelmezett paraméterek

Lehetőség van alapértelmezett értékeket adni a paramétereknek. Ha a hívás során egy paraméter nincs megadva, akkor az alapértelmezett értéket használja.

#include <iostream>

// Függvénydeklaráció alapértelmezett paraméterrel
void koszont(std::string nev = "Világ") {
    std::cout << "Hello, " << nev << "!" << std::endl;
}

int main() {
    koszont();        // "Hello, Világ!"
    koszont("Anna");  // "Hello, Anna!"
    return 0;
}

5. Változó számú paraméterek (variadic functions)

Ha egy függvénynek nem ismert számú paramétere van, használhatunk variadic függvényeket a ... operátorral és az initializer_list vagy va_list segítségével.

#include <iostream>
#include <cstdarg>

// Variadic függvény
int osszeg(int db, ...) {
    va_list args;
    va_start(args, db);
    int sum = 0;
    for (int i = 0; i < db; i++) {
        sum += va_arg(args, int);
    }
    va_end(args);
    return sum;
}

int main() {
    std::cout << osszeg(3, 1, 2, 3) << std::endl; // 6
}

🔹 C++11-től érdemes helyette initializer_list-et használni:

#include <iostream>
#include <initializer_list>

int osszeg(std::initializer_list<int> szamok) {
    int sum = 0;
    for (int szam : szamok) {
        sum += szam;
    }
    return sum;
}

int main() {
    std::cout << osszeg({1, 2, 3, 4, 5}) << std::endl; // 15
}

Összegzés

A C++ függvények lehetővé teszik a programok modularitását és újrafelhasználhatóságát.
Fontos koncepciók: - Függvénydeklaráció vs. definíció - Érték és referencia szerinti paraméterátadás - Konstans referenciák (const reference) - Alapértelmezett paraméterek - Változó számú paraméterek (variadic functions)