O structură reprezintă un grup de date grupate împreună sub același nume. Aceste date, numite câmpuri, pot avea tipuri și lungimi diferite (pot fi chiar tablouri). În C++, structurile pot fi definite folosind tipul struct, moștenit din limbajul C. Astfel, ne putem crea propriile tipuri de date, pentru a lucra mai ușor cu anumite informații.

Desigur, o soluție mai flexibilă este folosirea claselor, care sunt noutatea principală adusă de C++, însă când vrem să definim un tip care să reunească doar câteva date, eventual să supraîncărcăm câțiva operatori pentru el și să-i scriem un constructor, este de ajuns tipul struct.

Declararea unei structuri

O structură poate fi declarată astfel:

Numele noului tip va fi NumeTip, cu variabilele var1, var2, ..., varN. NumeTip poate începe și cu literă mică, ca orice identificator din C++, însă mi se pare mai convenabil să înceapă cu majusculă, pentru ca apoi să pot declara o variabilă cu numele numeTip. Nu este obligatoriu să declarăm variabilele imediat după definirea tipului; acestea pot fi declarate oriunde în program, după asta, prin sintaxa:

Când declarăm un struct, nu este obligatoriu să-i dăm și nume, dar trebuie să declarăm măcar o variabilă după acolada închisă, ca apoi să putem folosi decltype pentru a le declara pe celelalte. În acest caz, noul tip se va numi structură anonimă.

Exemple de structuri

Iată câteva exemple utile de structuri:

Inițializarea unei variabile de tip struct

O variabilă de tip struct se poate inițializa scriindu-i între acolade, separate prin virgulă, valorile pentru fiecare câmp, în ordinea în care apare acesta în definiție. Înaintea primei acolade se poate pune operatorul de atribuire, dar la noile versiuni C++ a devenit ceva opțional.

De asemenea, unele compilatoare suportă această sintaxă și pentru atribuirea unei valori variabilei după declarare, însă nu este recomandat.

Dacă nu le inițializăm noi cu anumite valori, toate câmpurile dintr-o variabilă de tip struct declarată global sunt inițializate automat cu 0, iar în cazul declarării locale, cu valori random rămase pe stivă, exact ca la variabilele obișnuite.

Accesarea câmpurilor unei variabile de tip struct

Pentru a accesa un câmp al unei variabile de tip struct se folosește operatorul de selecție directă (.), sintaxa fiind variabila.camp. Exemplu:

Operatorul de atribuire

Singurul operator predefinit pentru tipul struct este cel de atribuire. Acesta copiază valoarea fiecărui câmp din operandul stâng în cel drept, iar în cazul câmpurilor tablou, le copiază pe rând elementele. Alți operatori pot fi supraîncărcați, dar voi arăta cum într-un articol despre OOP 🙂

Pointeri la structuri

Există pointeri și pentru struct, la fel ca pentru orice tip de date, și funcționează la fel.

Problema apare la accesarea câmpurilor unei variabile indicată de un pointer. Operatorul punct nu funcționează, însă există un operator de dereferențiere, numit operator de selecție indirectă, creat special pentru această situație (->).

pointer->camp este echivalent cu (*pointer).camp.

Dacă aveți vreo întrebare despre tipul struct în C++, nu ezitați să o adresați mai jos printr-un comentariu ca să vă pot răspunde 🙂

Îți place conținutul acestui site?

Dacă vrei să mă susții în întreținerea server-ului și în a scrie mai multe articole de calitate pe acest blog, mă poți ajuta printr-o mică donație. Află aici cum o poți face!