Ugrás a tartalomhoz

structure

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

Főnév

structure (tsz. structures)

  1. struktúra, szerkezet
  2. (informatika) struktúra

A struktúra (struct) egy olyan adatszerkezet a C++ nyelvben, amely lehetővé teszi több különböző típusú változó egy egységben történő tárolását. A struktúrák hasonlítanak az osztályokhoz (class), azonban alapértelmezés szerint minden tagjuk publikus (public), míg az osztályoknál privát (private).



1. Mi az a struktúra?

A struktúra egy felhasználó által definiált adattípus, amely lehetővé teszi, hogy egy objektumban több különböző változót (például egész számokat, lebegőpontos számokat és karakterláncokat) tároljunk.

Egyszerű struktúra példája

#include <iostream>
using namespace std;

struct Doboz {
    string nev;
    int szelesseg;
    int magassag;
    int hossz;
};

int main() {
    Doboz d1 = {"NagyDoboz", 10, 20, 30};

    cout << "Doboz neve: " << d1.nev << endl;
    cout << "Méretek: " << d1.szelesseg << "x" << d1.magassag << "x" << d1.hossz << endl;

    return 0;
}

Magyarázat:

  • A struct Doboz egy struktúrát hoz létre, amely három egész számot és egy string típust tartalmaz.
  • Az int main() függvényben létrehoztunk egy d1 nevű változót, amely a struktúra egy példánya.
  • Az objektum értékeit kiírtuk a konzolra.



2. Struktúrák deklarálása és inicializálása

A struktúrák használatához először deklarálnunk kell őket, majd példányosítanunk (létrehozni belőlük objektumokat).

Deklaráció és inicializálás különböző módokon

struct Auto {
    string marka;
    string tipus;
    int evjarat;
};

int main() {
    // 1. Közvetlen inicializálás
    Auto auto1 = {"Toyota", "Corolla", 2022};

    // 2. Külön változók beállítása
    Auto auto2;
    auto2.marka = "Ford";
    auto2.tipus = "Focus";
    auto2.evjarat = 2019;

    cout << auto1.marka << " " << auto1.tipus << " (" << auto1.evjarat << ")" << endl;
    cout << auto2.marka << " " << auto2.tipus << " (" << auto2.evjarat << ")" << endl;

    return 0;
}

Ebben a példában: - Az auto1 példányt azonnal inicializáltuk kapcsos zárójelekkel {}. - Az auto2 változót először létrehoztuk, majd később töltöttük fel adatokkal.



3. Struktúrák használata függvényekben

A struktúrákat átadhatjuk függvényeknek érték szerint, referenciaként vagy mutatóként.

Függvény, amely egy struktúrát kap paraméterként

#include <iostream>
using namespace std;

struct Szemely {
    string nev;
    int eletkor;
};

// Függvény, amely kiírja a struktúra adatait
void kiirSzemely(Szemely s) {
    cout << "Nev: " << s.nev << ", Eletkor: " << s.eletkor << endl;
}

int main() {
    Szemely szemely1 = {"Kiss Péter", 25};
    kiirSzemely(szemely1); // Függvényhívás
    return 0;
}

Ebben a példában: - A kiirSzemely() függvény egy Szemely struktúrát kap paraméterként. - A függvény az átadott struktúra adatait a képernyőre írja.

Megjegyzés: Az ilyen átadás másolatot készít, ami felesleges memóriahasználathoz vezethet. Ennek elkerülése érdekében használjunk referenciát (&).

Struktúra átadása referenciával

void kiirSzemely(const Szemely& s) {
    cout << "Nev: " << s.nev << ", Eletkor: " << s.eletkor << endl;
}

A const megakadályozza az érték módosítását.



4. Dinamikus memóriafoglalás struktúrákhoz

Struktúrákat létrehozhatunk dinamikusan is a heap memóriában a new operátorral.

Példa – Dinamikusan foglalt struktúra

#include <iostream>
using namespace std;

struct Termek {
    string nev;
    double ar;
};

int main() {
    Termek* p = new Termek; // Dinamikus foglalás

    p->nev = "Laptop";
    p->ar = 299999.99;

    cout << "Termek neve: " << p->nev << ", Ara: " << p->ar << " Ft" << endl;

    delete p; // Memória felszabadítása
    return 0;
}

Ebben a példában: - A new operátor segítségével dinamikusan foglaltunk egy Termek struktúrát. - Az adatokhoz az objektum mutatóján keresztül (-> operátor) férünk hozzá. - A delete segítségével felszabadítjuk a memóriát.



5. Beágyazott struktúrák

Egy struktúra tartalmazhat egy másik struktúrát is.

Példa – Beágyazott struktúrák

#include <iostream>
using namespace std;

struct Cim {
    string varos;
    string utca;
    int hazszam;
};

struct Szemely {
    string nev;
    int eletkor;
    Cim lakcim;
};

int main() {
    Szemely szemely1 = {"Kovács Béla", 30, {"Budapest", "Petőfi utca", 12}};

    cout << "Nev: " << szemely1.nev << ", Varos: " << szemely1.lakcim.varos << endl;

    return 0;
}

Ebben a példában: - A Cim struktúra egy személy címét tárolja. - A Szemely struktúra tartalmaz egy Cim példányt.



6. Struktúrák összehasonlítása és műveletek végzése

A C++ nem támogatja az == és != operátorokat a struktúráknál, így ha összehasonlítást szeretnénk végezni, manuálisan kell megírnunk a logikát.

Összehasonlító függvény

bool egyenlo(const Szemely& s1, const Szemely& s2) {
    return (s1.nev == s2.nev) && (s1.eletkor == s2.eletkor);
}

Összegzés

A struktúrák rendkívül hasznosak összetett adatok tárolására és kezelésére. A legfontosabb tudnivalók: ✅ Struktúrák segítségével többféle adatot tárolhatunk egyetlen egységben.
✅ Az objektumok érték szerint vagy referenciaként is átadhatók függvényeknek.
✅ A struktúrák dinamikusan is foglalhatók heap memóriában.
✅ Lehetőség van beágyazott struktúrák létrehozására.
✅ Az == és != operátorokat manuálisan kell implementálni.

A struktúrák C++ programozásban gyakran az osztályok előfutárai, és ha szükséges, tovább fejleszthetők osztályokká (class). 🚀

Kiejtés

  • IPA: /stʁyk.tyʁ/

Főnév

structure nn (plural structures)

  1. szerkezet