nested structure (tsz. nested structures)
struct
definícióban egy másik struct
típust használunk adattagként.Ez lehetővé teszi komplex, hierarchikus adatszerkezetek modellezését, amelyek természetes módon tükrözik a valóságban is meglévő összetett kapcsolatokat.
struct
C++-banElőször nézzük meg, hogy mi is az a struct
:
struct Date {
int year;
int month;
int day;
};
A Date
struktúra 3 adattagot tartalmaz.
struct
fogalmaMost nézzük meg a beágyazott struct
példáját:
struct Address {
std::string street;
std::string city;
int zipCode;
};
struct Person {
std::string name;
int age;
Address address; // beágyazott szerkezet
};
Itt az Address
struktúra be van ágyazva a Person
struktúrába, mint egy adattag.
A Person
típusú objektumok rendelkezni fognak egy Address
típusú adattaggal.
int main() {
Person p;
p.name = "Alice";
p.age = 30;
p.address.street = "Main Street 123";
p.address.city = "Budapest";
p.address.zipCode = 1234;
std::cout << p.name << " lives at " << p.address.street << ", "
<< p.address.city << ", ZIP: " << p.address.zipCode << std::endl;
return 0;
}
struct
?
Person
-hoz tartozhat egy Date
születési dátum, egy Address
cím stb.
struct
(pl. Address
) több helyen is felhasználható.Company
, Customer
, Supplier
— mindegyiknek lehet Address
.
Person
-hoz kapcsolódó Address
egy külön definiált típus.
struct
Akár a struktúrán belül is definiálhatunk egy másik struktúrát:
struct Person {
std::string name;
int age;
struct Address {
std::string street;
std::string city;
int zipCode;
};
Address address;
};
Használat:
Person p;
p.address.street = "Main Street";
👉 Ebben az esetben az Address
típus Person::Address néven is elérhető.
A beágyazott szerkezet nem csak struct
-ban, hanem class
-ban is használható:
class Company {
public:
std::string name;
struct Address {
std::string street;
std::string city;
int zipCode;
};
Address officeAddress;
};
A beágyazott struct
lehet:
class Company {
public:
struct Address {
std::string street;
std::string city;
int zipCode;
};
Address officeAddress;
};
Ha private
-ként definiáljuk:
class Company {
private:
struct Address {
std::string street;
std::string city;
int zipCode;
};
Address officeAddress;
};
Ekkor kívülről nem lehet Company::Address
-t példányosítani.
struct
-hozA beágyazott struct
-hoz is írhatunk konstruktorokat:
struct Address {
std::string street;
std::string city;
int zipCode;
Address(const std::string& st, const std::string& c, int zip)
: street(st), city(c), zipCode(zip) {}
};
Használat:
Person p;
p.address = Address("Main Street", "Budapest", 1234);
A struct
-okat többszintűen is be lehet ágyazni:
struct GPS {
double latitude;
double longitude;
};
struct Address {
std::string street;
std::string city;
int zipCode;
GPS location;
};
struct Person {
std::string name;
int age;
Address address;
};
Most már:
p.address.location.latitude = 47.4979;
p.address.location.longitude = 19.0402;
struct
vs. különálló struct
struct
önállóan is hasznos (pl. Address
), érdemes külön definiálni.
Address
Date
GPS
Config
Error
✅ Nagyon jó modellezési eszköz ✅ Segít az adatszerkezetek logikus felépítésében ✅ Csökkenti a névütközéseket (scope) ✅ Támogatja az újrafelhasználhatóságot
⚠️ Túl sok szintű beágyazás nehezíti az olvashatóságot ⚠️ Karbantartás bonyolultabb lehet, ha a belső struct
sokat változik ⚠️ Ha a beágyazott struct
privát, de kívül is kéne használni, kompromisszumot kell kötni
A beágyazott szerkezetek C++-ban lehetővé teszik:
✅ összetett objektumok természetes modellezését ✅ a kód újrafelhasználhatóságát ✅ hierarchikus adatszerkezetek létrehozását
A nested struct
használata egy nagyon erőteljes eszköz, különösen nagyobb rendszerekben vagy modellekben.
👉 Alapszabály: