nested structure
Főnév
nested structure (tsz. nested structures)
- (informatika) A C++ nyelvben a strukturált adattípusok (struct) rendkívül hasznosak a kapcsolódó adatok csoportosítására. A beágyazott szerkezet (nested structure) egy olyan technika, amelyben egy
structdefinícióban egy másikstructtí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.
Alapvető struct C++-ban
Elő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.
Beágyazott struct fogalma
Most 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.
Példa használat
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;
}
Miért hasznos a beágyazott struct?
1️⃣ Jobb szervezés
- Összetett objektumokat természetes módon lehet modellezni.
- Pl.: egy
Person-hoz tartozhat egyDateszületési dátum, egyAddresscím stb.
2️⃣ Újrafelhasználhatóság
- A beágyazott
struct(pl.Address) több helyen is felhasználható. - Pl.:
Company,Customer,Supplier— mindegyiknek lehetAddress.
3️⃣ Modularitás
- A kód modulárisabbá, olvashatóbbá válik.
- A
Person-hoz kapcsolódóAddressegy külön definiált típus.
Szintaktikai lehetőségek
Beágyazottan definiált 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ő.
Osztályokkal is működik
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;
};
Public / Private beágyazott struktúra
A beágyazott struct lehet:
- public → kívülről is látható
- private → csak az osztályon belül használható
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.
Konstruktorok beágyazott struct-hoz
A 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);
Többszintű beágyazás
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;
Beágyazott struct vs. különálló struct
- Ha az adott
structönállóan is hasznos (pl.Address), érdemes külön definiálni. - Ha csak az adott osztályon belül használod, lehet beágyazni az osztályon belül.
Tipikus felhasználások
- Címek →
Address - Dátum →
Date - Koordináták →
GPS - Statikus konfigurációs blokkok →
Config - Hibakód + hibaüzenet →
Error
Előnyök
✅ 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
Hátrányok
⚠️ 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
Összefoglalás
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:
- Ha az adatszerkezet önállóan is értelmes, definiáld külön!
- Ha az adatszerkezet csak egy másik típuson belül értelmezett, beágyazva is definiálhatod.
- nested structure - Szótár.net (en-hu)
- nested structure - Sztaki (en-hu)
- nested structure - Merriam–Webster
- nested structure - Cambridge
- nested structure - WordNet
- nested structure - Яндекс (en-ru)
- nested structure - Google (en-hu)
- nested structure - Wikidata
- nested structure - Wikipédia (angol)