struct data type
Főnév
struct data type (tsz. struct data types)
- (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 astructa 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
structtöbb adattagot tartalmazhat és hasonlóan működik, mint azosztály(class). - Alapértelmezés szerint a
structtagjai 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 astructideális választás.
- struct data type - Szótár.net (en-hu)
- struct data type - Sztaki (en-hu)
- struct data type - Merriam–Webster
- struct data type - Cambridge
- struct data type - WordNet
- struct data type - Яндекс (en-ru)
- struct data type - Google (en-hu)
- struct data type - Wikidata
- struct data type - Wikipédia (angol)