C++ Strukturer med eksempel

โšก Smart opsummering

Struktur i C++ er en brugerdefineret datatype, der grupperer elementer af forskellige datatyper under et enkelt navn, hvor รฉn variabel kan indeholde relaterede vรฆrdier sรฅsom en persons navn, statsborgerskab og alder sammen.

  • ๐Ÿ“ฆ Forskellige datatyper: En struktur grupperer variabler af forskellige typer under รฉt brugerdefineret navn.
  • ๐Ÿ”‘ struct-nรธgleord: Definer en struktur med nรธgleordet struct, og angiv derefter medlemmer inden for krรธllede parenteser.
  • ๐Ÿงฑ Oprettelse af instanser: Nรฅr Person p skrives, oprettes en struct-variabel og allokeres dens hukommelse.
  • ๐ŸŽฏ Punktoperator: Lรฆs eller sรฆt et hvilket som helst medlem gennem instansen, som i p.age = 27.
  • โžก๏ธ Pointere og funktioner: En struktur fungerer med pointere og sender til en funktion som et almindeligt argument.
  • ๐Ÿค– AI assistance: GitHub Copilot og andre AI-assistenter scaffolder strukturdefinitioner og medlemsadgang fra en kommentar.

C++ Struktur

Hvad er en struktur i C++?

En STRUKTUR er en C++ datastruktur, der kan bruges til at gemme elementer af forskellige datatyper sammen. I C++, en struktur er en brugerdefineret datatype. Strukturen opretter en datatype for grupperping elementer af forskellige datatyper under en enkelt datatype.

For eksempel:

Antag, at du skal gemme oplysninger om en person, deres navn, statsborgerskab og alder. Du kan oprette variabler som navn, statsborgerskab og alder for at gemme dataene separat.

Du kan dog vรฆre nรธdt til at gemme oplysninger om mange personer i fremtiden. Det betyder, at der vil blive oprettet variabler for forskellige individer. For eksempel navn1, statsborgerskab1, alder1 osv. For at undgรฅ dette er det bedre at oprette en struct.

Hvornรฅr skal man bruge en struktur?

Her er nogle grunde til at bruge struktur i C++.

  • Brug en struct, nรฅr du skal gemme elementer af forskellige datatyper under รฉn datatype.
  • C++ strukturer er en vรฆrditype i stedet for at vรฆre en referencetype. Brug en struktur, hvis du ikke har til hensigt at รฆndre dine data efter oprettelsen.

C++ Strukturinitialisering

At oprette en C++ struktur, bruger vi nรธgleordet struct efterfulgt af en identifikator. Identifikationen bliver navnet pรฅ strukturen. Her er syntaksen for oprettelse af en C++ struktur:

Syntaks:

struct struct_name  
{  
     // struct members
}   

I ovenstรฅende syntaks har vi brugt nรธgleordet struct. struct_name er navnet pรฅ strukturen.

Strukturelementerne tilfรธjes inden for krรธllede seler. Disse medlemmer tilhรธrer sandsynligvis forskellige datatyper.

For eksempel:

struct Person  
{  
    char name[30];  
     int citizenship;  
     int age;  
}  

I ovenstรฅende eksempel er Person en struktur med tre medlemmer. Medlemmerne inkluderer navn, statsborgerskab og alder. Et medlem er af char-datatypen, mens de resterende 2 er heltal, nรฅr en struktur oprettes, er der ikke allokeret hukommelse. Hukommelse tildeles kun, efter at en variabel er tilfรธjet til strukturen.

Oprettelse af strukturforekomster

I ovenstรฅende eksempel har vi oprettet en struktur ved navn Person. Vi kan oprette en struct-variabel som fรธlger:

Person p;

P er en strukturvariabel af typen Person. Vi kan bruge denne variabel til at fรฅ adgang til medlemmerne af strukturen.

Adgang til strukturmedlemmer

For at fรฅ adgang til struct-medlemmerne bruger vi instansen af โ€‹โ€‹struct- og prik-operatoren (.). For at fรฅ adgang til medlemsalderen for struct Person:

p.age = 27;

Vi har fรฅet adgang til medlemsalderen for struct Person ved hjรฆlp af structs instans, s. Vi har sรฅ sat vรฆrdien af โ€‹โ€‹medlemsalderen til 27 รฅr.

Eksempel 1:

#include <iostream>    
using namespace std;
struct Person
{
	int citizenship;
	int age;
};
int main(void) {
	struct Person p;
	p.citizenship = 1;
	p.age = 27;
	cout << "Person citizenship: " << p.citizenship << endl;
	cout << "Person age: " << p.age << endl;

	return 0;
}

Output:

Adgang til strukturmedlemmer

Her er et skรฆrmbillede af koden:

Adgang til strukturmedlemmer

Code Forklaring:

  1. Inkluder iostream-header-filen i vores program for at bruge de funktioner, der er defineret i den.
  2. Inkluder std-navneomrรฅdet for at bruge dets klasser uden at kalde det.
  3. Opret en struktur med navnet Person.
  4. Begyndelsen af โ€‹โ€‹strukturlegemet.
  5. Opret et struct-medlem ved navn statsborgerskab af typen heltal.
  6. Opret et struct-medlem ved navn alder af typen heltal.
  7. Slutningen af โ€‹โ€‹strukturlegemet.
  8. Kald funktionen main(). Programlogikken skal tilfรธjes i denne funktions brรธdtekst.
  9. Opret en instans af strukturen Person og giv den navnet p.
  10. Indstil vรฆrdien af โ€‹โ€‹structmedlemsborgerskab til 1.
  11. Indstil vรฆrdien af โ€‹โ€‹strukturmedlemsalderen til 27.
  12. Udskriv vรฆrdien af โ€‹โ€‹struct-medlemsborgerskabet pรฅ konsollen sammen med en anden tekst.
  13. Udskriv vรฆrdien af โ€‹โ€‹struct-medlemsalderen pรฅ konsollen sammen med anden tekst.
  14. Programmet bรธr returnere en vรฆrdi, hvis det kรธrer med succes.
  15. Slut pรฅ main()-funktionen.

Henvisninger til struktur

Det er muligt at oprette en markรธr, der peger pรฅ en struktur. Det svarer til, hvordan pointere, der peger pรฅ native datatyper som int, float, double osv. oprettes. Bemรฆrk, at en pointer ind C++ vil gemme en hukommelsesplacering.

Eksempel 2:

#include <iostream>
using namespace std;

struct Length
{
	int meters;
	float centimeters;
};

int main()
{
	Length *ptr, l;

	ptr = &l;

	cout << "Enter meters: ";
	cin >> (*ptr).meters;
	cout << "Enter centimeters: ";
	cin >> (*ptr).centimeters;
	cout << "Length = " << (*ptr).meters << " meters " << (*ptr).centimeters << " centimeters";

	return 0;
}

Output:

Henvisninger til struktur

Her er et skรฆrmbillede af koden:

Henvisninger til struktur

Code Forklaring:

  1. Inkluder iostream-header-filen i vores program for at bruge dens funktioner.
  2. Inkluder std-navneomrรฅdet i vores program for at bruge dets klasser uden at kalde det.
  3. Opret en struktur med navnet Lรฆngde.
  4. Start af konstruktionens krop Lรฆngde.
  5. Opret et struct-medlem med navnet meter med heltalsdatatype.
  6. Opret et struct-medlem ved navn centimeter af typen heltal.
  7. Enden af โ€‹โ€‹konstruktionens krop Lรฆngde.
  8. Kald funktionen main().
  9. Start af hovedteksten af โ€‹โ€‹funktionen main().
  10. Opret en pointervariabel *ptr og normalvariabel l af typen Length.
  11. Gem adressen pรฅ variabel l i vores pointer variabel.
  12. Vis en meddelelse pรฅ konsollen, der beder brugeren om at indtaste vรฆrdien for variable mรฅlere.
  13. Lรฆs den vรฆrdi, som brugeren har indtastet via tastaturet. Medlemsfunktionsmรฅlerne tilgรฅs her ved hjรฆlp af pointervariablen.
  14. Vis en meddelelse pรฅ konsollen, der beder brugeren om at indtaste vรฆrdien for variable centimeter.
  15. Lรฆs den vรฆrdi, som brugeren har indtastet via tastaturet. Medlemsfunktionen centimeter er her adgang til ved hjรฆlp af pointervariablen.
  16. Vis vรฆrdierne lรฆst fra brugeren pรฅ konsollen sammen med anden tekst.
  17. Programmet skal returnere en vรฆrdi ved vellykket eksekvering.
  18. Slutningen af โ€‹โ€‹hoveddelen af โ€‹โ€‹funktionen main().

Struktur som funktionsargument

Du kan sende en struct til en funktion som et argument. Dette gรธres pรฅ samme mรฅde som at bestรฅ et normalt argument. Strukturvariablerne kan ogsรฅ overfรธres til en funktion. Et godt eksempel er, nรฅr du skal vise vรฆrdierne for struct-medlemmer. Lad os demonstrere dette:

Eksempel 3:

#include<iostream>
using namespace std;

struct Person
{
	int citizenship;
	int age;
};

void func(struct Person p);

int main()
{
	struct Person p;

	p.citizenship = 1;
	p.age = 27;

	func(p);
	return 0;
}
void func(struct Person p)
{
	cout << " Person citizenship: " << p.citizenship<<endl;
	cout << " Person age: " << p.age;
}

Output:

Struktur som funktionsargument

Her er et skรฆrmbillede af koden:

Struktur som funktionsargument

Code Forklaring:

  1. Inkluder iostream-header-filen i vores fil. Vi vil derefter bruge dens funktioner uden at fรฅ fejl.
  2. Inkluder std-navneomrรฅdet i vores program for at bruge dets klasser. Vi behรธver ikke kalde navneomrรฅdet for at bruge dets klasser.
  3. Opret en struktur med navnet Person.
  4. Start af kroppen af โ€‹โ€‹struct Person.
  5. Opret et medlem af struct Person. Medlemmet hedder statsborgerskab og er af typen heltal.
  6. Opret et medlem af struct Person. Medlemmet hedder alder og er af typen heltal.
  7. Slutningen af โ€‹โ€‹kroppen af โ€‹โ€‹struct Person.
  8. Opret en funktion, der tager forekomsten af โ€‹โ€‹struct Person, p, som argument.
  9. Kald hovedfunktionen. { markerer begyndelsen af โ€‹โ€‹hoveddelen af โ€‹โ€‹funktionen main().
  10. Opret en instans af struct Person og giv den navnet p.
  11. Fรฅ adgang til struct-medlemsvariablen statsborgerskab ved at bruge instansen af โ€‹โ€‹struct, p, og tildel den vรฆrdien 1.
  12. Fรฅ adgang til struct-medlemsvariablen alder ved at bruge instansen af โ€‹โ€‹struct, p, og tildel den vรฆrdien 27.
  13. Kald funktionen og giv den instansen af โ€‹โ€‹strukturen Person, p, som argument.
  14. Funktionen skal returnere en vรฆrdi ved vellykket udfรธrelse.
  15. Slutningen af โ€‹โ€‹hoveddelen af โ€‹โ€‹funktionen main().
  16. Opret kroppen af โ€‹โ€‹funktionen.
  17. Starten af โ€‹โ€‹kroppen af โ€‹โ€‹funktionen.
  18. Fรฅ adgang til struct-medlemsborgerskabsvรฆrdien og udskriv den pรฅ konsollen sammen med anden tekst.
  19. Fรฅ adgang til struct-medlemsalderens vรฆrdi og udskriv den pรฅ konsollen sammen med anden tekst.
  20. Slut pรฅ funktionslegemet.

Begrรฆnsning af en C++ struktur

Fรธlgende er begrรฆnsningerne for strukturer:

  • Strukturdatatypen kan ikke behandles som indbyggede datatyper.
  • Operators som + - og andre kan ikke bruges pรฅ strukturvariabler.
  • Strukturer understรธtter ikke dataskjul. Medlemmerne af en struktur kan tilgรฅs af enhver funktion uanset dens omfang.
  • Statiske elementer kan ikke deklareres inde i strukturen.
  • Konstruktรธrer kan ikke oprettes inde i en struktur.

Ofte Stillede Spรธrgsmรฅl

In C++ En struct og en klasse er nรฆsten identiske. Den eneste reelle forskel er standardadgangen: struct-medlemmer er som standard offentlige, mens klassemedlemmer er private. Begge understรธtter medlemsfunktioner, konstruktรธrer og arv.

En AC-struktur indeholder kun data, og du skal skrive en struct fรธr hver variabeldeklaration. C++ struct kan ogsรฅ indeholde medlemsfunktioner, konstruktรธrer og adgangsspecifikationer, og nรธgleordet struct er valgfrit, nรฅr variabler deklareres.

Deklarer strukturen, og definer derefter et array af den, for eksempel Person people[3]. Hvert element er en fuld struktur, og du tilgรฅr medlemmer med people[0].age. Arrays af strukturer gemmer mange poster af samme type sammen.

En indlejret struktur er en struktur, der er deklareret som et medlem i en anden struktur. Den grupperer relaterede underdata, sรฅsom en datostruktur placeret i en medarbejderstruktur. Du nรฅr indre medlemmer ved at kรฆde punktumoperatoren sammen.

Stรธrrelsen er omtrent summen af โ€‹โ€‹dens medlemmer plus den margin, som compileren tilfรธjer for justering, sรฅ sizeof kan overstige den rรฅ total. Medlemsfunktioner tilfรธjer ingenting. Sortering af medlemmer efter stรธrrelse reducerer spild af margin.

Brug piloperatoren, nรฅr du holder en pointer hen til en struktur. I stedet for (*ptr).age lรฆser genvejen ptr->age det samme medlem. Punktoperatoren virker pรฅ en direkte instans, ikke en pointer.

Ja. AI-kodningsassistenter forvandler en kort prompt eller kommentar til en komplet C++ struktur, inklusive medlemmer, konstruktรธrer og feltadgang. Gennemgรฅ altid de genererede datatyper og justering, da AI kan overse projektspecifikke krav.

Ja. GitHub Copilot foreslรฅr strukturdefinitioner, medlemsvariabler og adgang med punktum eller pil, mens du skriver i din editor. Den hรฅndterer gentagne standardtekster godt, selvom du stadig bรธr verificere typer, padding og logik, fรธr du kompilerer.

Opsummer dette indlรฆg med: