structure
Főnév
structure (tsz. structures)
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 egystring
típust tartalmaz. - Az
int main()
függvényben létrehoztunk egyd1
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
). 🚀
- structure - Szótár.net (en-hu)
- structure - Sztaki (en-hu)
- structure - Merriam–Webster
- structure - Cambridge
- structure - WordNet
- structure - Яндекс (en-ru)
- structure - Google (en-hu)
- structure - Wikidata
- structure - Wikipédia (angol)
Kiejtés
- IPA: /stʁyk.tyʁ/
Főnév
structure nn (plural structures)