Ugrás a tartalomhoz

struct data type

A Wikiszótárból, a nyitott szótárból
(struct szócikkből átirányítva)


Főnév

struct data type (tsz. struct data types)

  1. (informatika) A struct (structure / struktúra) egy olyan adatszerkezet C++-ban, amely több különböző típusú adatot foglalhat össze egyetlen egységbe. Bár a struct a C nyelvből származik, C++-ban sokkal erősebb funkciókkal rendelkezik, például tagfüggvényekkel, konstruktorokkal és örökléssel.



1. Egyszerű struct létrehozása

A struct lehetővé teszi több változó egyetlen összefüggő egységként való tárolását. Példa egy egyszerű struct deklarációra:

#include <iostream>
using namespace std;

struct Ember {
    string nev;
    int eletkor;
    double magassag;
};

int main() {
    Ember szemely = {"Kiss Péter", 25, 1.80};

    cout << "Nev: " << szemely.nev << endl;
    cout << "Eletkor: " << szemely.eletkor << " ev" << endl;
    cout << "Magassag: " << szemely.magassag << " m" << endl;

    return 0;
}

Kimenet:

Nev: Kiss Péter
Eletkor: 25 ev
Magassag: 1.8 m

Magyarázat:
- A struct Ember egy adatszerkezet, amely három tagot tartalmaz: nev, eletkor és magassag. - A szemely nevű változót deklaráljuk és inicializáljuk. - A cout segítségével kiíratjuk az értékeket.



2. struct inicializálása többféleképpen

Egy struktúrát többféleképpen is inicializálhatunk:

a) Direkt inicializálás

Ember e1 = {"Kovács Béla", 30, 1.75};

b) Lista inicializálás (C++11 óta)

Ember e2{"Nagy Anna", 22, 1.65};

c) Kézi módosítás

Ember e3;
e3.nev = "Tóth László";
e3.eletkor = 40;
e3.magassag = 1.82;

3. Struktúrák és függvények

A struct típusú változókat függvényeknek is átadhatjuk.

a) Érték szerinti átadás

Ha egy struct-ot érték szerint adunk át egy függvénynek, akkor annak egy másolata kerül a függvénybe.

#include <iostream>
using namespace std;

struct Ember {
    string nev;
    int eletkor;
};

void kiir(Ember szemely) {
    cout << "Nev: " << szemely.nev << ", Eletkor: " << szemely.eletkor << endl;
}

int main() {
    Ember e = {"Jakab Ferenc", 28};
    kiir(e);  // Másolat kerül a függvénybe
    return 0;
}

b) Referencia szerinti átadás

Hatékonyabb megoldás a referencia (&) használata, mivel így elkerüljük a másolást.

void kiir(const Ember& szemely) { 
    cout << "Nev: " << szemely.nev << ", Eletkor: " << szemely.eletkor << endl;
}

A const biztosítja, hogy a függvény ne módosíthassa az átadott adatot.



4. struct és pointerek

A struktúrák használhatók pointerekkel is. Ez hasznos lehet, ha dinamikusan szeretnénk létrehozni objektumokat.

#include <iostream>
using namespace std;

struct Ember {
    string nev;
    int eletkor;
};

int main() {
    Ember* ptr = new Ember{"Szabó János", 33};
    
    cout << "Nev: " << ptr->nev << ", Eletkor: " << ptr->eletkor << endl;
    
    delete ptr; // Memória felszabadítása
    return 0;
}

Fontos: Pointerek esetén az -> operátort használjuk a tagok eléréséhez (ptr->nev helyett (*ptr).nev is működne, de nehezebben olvasható).



5. struct konstruktora C++-ban

A C++ lehetőséget ad arra, hogy egy struct-nak konstruktort adjunk meg.

#include <iostream>
using namespace std;

struct Ember {
    string nev;
    int eletkor;

    // Konstruktor
    Ember(string n, int e) {
        nev = n;
        eletkor = e;
    }

    void kiir() {
        cout << "Nev: " << nev << ", Eletkor: " << eletkor << endl;
    }
};

int main() {
    Ember e("Kiss Gábor", 29);
    e.kiir();
    return 0;
}

Előny: Nem kell külön beállítanunk az értékeket minden példányosítás után.



6. struct és osztály (class) közötti különbség

A C++-ban a struct és a class között az egyetlen lényeges különbség az alapértelmezett hozzáférési szint:

Jellemző struct class
Alapértelmezett hozzáférés public private
Öröklésnél alapértelmezett mód public private

Példa:

struct PeldaStruct {
    int x;  // Alapértelmezés szerint public
};

class PeldaClass {
    int x;  // Alapértelmezés szerint private
};

Ha nem írunk semmit az int x; elé: - struct esetén: public - class esetén: private

De mindkettővel lehet OOP-t alkalmazni!



7. Struktúra öröklése

C++-ban a struct ugyanúgy támogathatja az öröklődést, mint a class.

#include <iostream>
using namespace std;

struct Szemely {
    string nev;
    int eletkor;
};

struct Tanulo : public Szemely {
    int osztaly;
};

int main() {
    Tanulo t;
    t.nev = "Molnár Dániel";
    t.eletkor = 18;
    t.osztaly = 12;

    cout << "Nev: " << t.nev << ", Eletkor: " << t.eletkor << ", Osztaly: " << t.osztaly << ". osztaly" << endl;

    return 0;
}

Összegzés

  • A struct több adattagot tartalmazhat és hasonlóan működik, mint az osztály (class).
  • Alapértelmezés szerint a struct tagjai public-ok.
  • Használhatunk benne konstruktort és tagfüggvényeket.
  • Lehetséges az öröklés.
  • Nagyobb programok esetén az osztályokat (class) részesítik előnyben, de egyszerűbb adatcsoportokhoz a struct ideális választás.