logo

Estructures en C++

Sovint ens trobem amb situacions en què hem d'emmagatzemar un grup de dades, ja sigui de tipus de dades similars o de tipus de dades no semblants. Hem vist matrius en C++ que s'utilitzen per emmagatzemar un conjunt de dades de tipus de dades similars en ubicacions de memòria contigües.
A diferència de Arrays, Estructures en C++ són tipus de dades definits per l'usuari que s'utilitzen per emmagatzemar grups d'elements de tipus de dades no similars.

Què és una estructura?



Una estructura és un tipus de dades definit per l'usuari en C/C++. Una estructura crea un tipus de dades que es pot utilitzar per agrupar elements de tipus possiblement diferents en un sol tipus.

Estructures en C++

Com crear una estructura?



La paraula clau 'struct' s'utilitza per crear una estructura. La sintaxi general per crear una estructura és la que es mostra a continuació:

struct structureName{ member1; member2; member3; . . . memberN; };>

Les estructures en C++ poden contenir dos tipus de membres:

    Membre de dades: aquests membres són variables C++ normals. Podem crear una estructura amb variables de diferents tipus de dades en C++. Funcions dels membres: aquests membres són funcions normals de C++. Juntament amb les variables, també podem incloure funcions dins d'una declaració d'estructura.

Exemple :



cua i cua de prioritat a java

C++




// Data Members> int> roll;> int> age;> int> marks;> > // Member Functions> void> printDetails()> {> >cout<<>'Roll = '><' '; cout<<'Age = '< ' '; cout<<'Marks = '< }>

>

>

A l'estructura anterior, els membres de les dades són tres variables senceres per emmagatzemar nombre de rotlle, edat i notes de qualsevol estudiant i la funció membre és printDetails() que està imprimint tots els detalls anteriors de qualsevol estudiant.

Com declarar les variables d'estructura?

Una variable d'estructura es pot declarar amb una declaració d'estructura o com una declaració separada com els tipus bàsics.

C++




// A variable declaration with structure declaration.> struct> Point> {> >int> x, y;> } p1;>// The variable p1 is declared with 'Point'> // A variable declaration like basic data types> struct> Point> {> >int> x, y;> };> int> main()> {> >struct> Point p1;>// The variable p1 is declared like a normal variable> }>

>

>

Nota: En C++, la paraula clau struct és opcional abans de la declaració d'una variable. En C, és obligatori.

Com inicialitzar els membres de l'estructura?
Membres de l'estructura no pot ser inicialitzat amb declaració. Per exemple, el següent programa C falla en la compilació.
Però es considera correcte en C++11 i superior.

C++




struct> Point> {> >int> x = 0;>// COMPILER ERROR: cannot initialize members here> >int> y = 0;>// COMPILER ERROR: cannot initialize members here> };>

>

>

El motiu de l'error anterior és simple, quan es declara un tipus de dades, no s'hi assigna cap memòria. La memòria només s'assigna quan es creen variables.

Els membres de l'estructura es poden inicialitzar amb declaració en C++. Per exemple, el següent programa C++ s'executa correctament sense llançar cap error.

C++




// In C++ We can Initialize the Variables with Declaration in Structure.> #include> using> namespace> std;> struct> Point {> >int> x = 0;>// It is Considered as Default Arguments and no Error is Raised> >int> y = 1;> };> int> main()> {> >struct> Point p1;> >// Accessing members of point p1> >// No value is Initialized then the default value is considered. ie x=0 and y=1;> >cout <<>'x = '> << p1.x <<>', y = '> << p1.y< // Initializing the value of y = 20; p1.y = 20; cout << 'x = ' << p1.x << ', y = ' << p1.y; return 0; } // This code is contributed by Samyak Jain>

>

>

 x=0, y=1 x=0, y=20>

Els membres de l'estructura es poden inicialitzar mitjançant claus '{}'. Per exemple, el següent és una inicialització vàlida.

peus contra peus

C++




struct> Point {> >int> x, y;> };> int> main()> {> >// A valid initialization. member x gets value 0 and y> >// gets value 1. The order of declaration is followed.> >struct> Point p1 = { 0, 1 };> }>

>

>


Com accedir als elements de l'estructura?
S'accedeix als membres de l'estructura mitjançant l'operador de punt (.).

C++




#include> using> namespace> std;> struct> Point {> >int> x, y;> };> int> main()> {> >struct> Point p1 = { 0, 1 };> >// Accessing members of point p1> >p1.x = 20;> >cout <<>'x = '> << p1.x <<>', y = '> << p1.y;> >return> 0;> }>

>

>

Sortida

x = 20, y = 1>

Què és un conjunt d'estructures?

Com altres tipus de dades primitius, podem crear una matriu d'estructures.

C++




#include> using> namespace> std;> struct> Point {> >int> x, y;> };> int> main()> {> >// Create an array of structures> >struct> Point arr[10];> >// Access array members> >arr[0].x = 10;> >arr[0].y = 20;> >cout << arr[0].x <<>' '> << arr[0].y;> >return> 0;> }>

>

>

Sortida

10 20>


Què és un punter d'estructura?
Igual que els tipus primitius, podem tenir un punter a una estructura. Si tenim un punter a l'estructura, s'accedeix als membres mitjançant l'operador de fletxa (->) en lloc de l'operador de punt (.).

C++




#include> using> namespace> std;> struct> Point {> >int> x, y;> };> int> main()> {> >struct> Point p1 = { 1, 2 };> >// p2 is a pointer to structure p1> >struct> Point* p2 = &p1;> >// Accessing structure members using> >// structure pointer> >cout ' ' return 0; }>

dibuix de rectangle gimp

>

>

Sortida

1 2>

Què és l'alineació dels membres de l'estructura?
Vegeu Obteniu més informació sobre les diferències entre Estructures i Classes en C++ .