structure data type (tsz. structure data types)
struct
vagy record) 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
).
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.
#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;
}
struct Doboz
egy struktúrát hoz létre, amely három egész számot és egy string
típust tartalmaz.int main()
függvényben létrehoztunk egy d1
nevű változót, amely a struktúra egy példánya.
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).
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.
A struktúrákat átadhatjuk függvényeknek érték szerint, referenciaként vagy mutatóké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 (&
).
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.
Struktúrákat létrehozhatunk dinamikusan is a heap memóriában a new
operátorral.
#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.
Egy struktúra tartalmazhat egy másik struktúrát is.
#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.
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.
bool egyenlo(const Szemely& s1, const Szemely& s2) {
return (s1.nev == s2.nev) && (s1.eletkor == s2.eletkor);
}
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
). 🚀