C++ Strukturera med exempel

โšก Smart sammanfattning

Strukturera i C++ รคr en anvรคndardefinierad datatyp som grupperar element av olika datatyper under ett enda namn, vilket lรฅter en variabel hรฅlla relaterade vรคrden som en persons namn, medborgarskap och รฅlder tillsammans.

  • ๐Ÿ“ฆ Olika datatyper: En struktur grupperar variabler av olika typer under ett anvรคndardefinierat namn.
  • ๐Ÿ”‘ struct-nyckelord: Definiera en struktur med nyckelordet struct och lista sedan medlemmar inom klammerparenteser.
  • ๐Ÿงฑ Skapa instanser: Att skriva Person p skapar en struct-variabel och allokerar dess minne.
  • ๐ŸŽฏ Punktoperator: Lรคs eller sรคtt valfri medlem genom instansen, som i p.age = 27.
  • โžก๏ธ Pekare och funktioner: En struktur arbetar med pekare och skickar till en funktion som ett vanligt argument.
  • ๐Ÿค– AI-hjรคlp: GitHub Copilot och andra AI-assistenter scaffoldar strukturdefinitioner och medlemsรฅtkomst frรฅn en kommentar.

C++ Struktur

Vad รคr en struktur i C++?

En STRUKTUR รคr en C++ datastruktur som kan anvรคndas fรถr att tillsammans lagra element av olika datatyper. I C++, en struktur รคr en anvรคndardefinierad datatyp. Strukturen skapar en datatyp fรถr grupperping objekt av olika datatyper under en enda datatyp.

Till exempel:

Anta att du behรถver lagra information om nรฅgon, deras namn, medborgarskap och รฅlder. Du kan skapa variabler som namn, medborgarskap och รฅlder fรถr att lagra data separat.

Du kan dock behรถva lagra information om mรฅnga personer i framtiden. Det innebรคr att variabler fรถr olika individer kommer att skapas. Till exempel namn1, medborgarskap1, รฅlder1 etc. Fรถr att undvika detta รคr det bรคttre att skapa en struktur.

Nรคr ska man anvรคnda en struktur?

Hรคr รคr nรฅgra anledningar till att anvรคnda struktur i C++.

  • Anvรคnd en struct nรคr du behรถver lagra element av olika datatyper under en datatyp.
  • C++ strukturer รคr en vรคrdetyp snarare รคn att vara en referenstyp. Anvรคnd en struktur om du inte har fรถr avsikt att รคndra dina data efter att du skapat dem.

C++ Strukturinitiering

Fรถr att skapa en C++ struktur anvรคnder vi nyckelordet struct, fรถljt av en identifierare. Identifieraren blir namnet pรฅ strukturen. Hรคr รคr syntaxen fรถr att skapa en C++ struktur:

Syntax:

struct struct_name  
{  
     // struct members
}   

I ovanstรฅende syntax har vi anvรคnt nyckelordet struct. struct_name รคr namnet pรฅ strukturen.

Strukturelementen lรคggs till inom lockiga hรคngslen. Dessa medlemmar tillhรถr troligen olika datatyper.

Till exempel:

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

I exemplet ovan รคr Person en struktur med tre medlemmar. Medlemmarna inkluderar namn, medborgarskap och รฅlder. En medlem รคr av char-datatyp, medan de รฅterstรฅende 2 รคr heltal nรคr en struktur skapas, minne tilldelas inte. Minne tilldelas endast efter att en variabel har lagts till i strukturen.

Skapa strukturinstanser

I exemplet ovan har vi skapat en struktur som heter Person. Vi kan skapa en structvariabel enligt fรถljande:

Person p;

P รคr en strukturvariabel av typen Person. Vi kan anvรคnda denna variabel fรถr att komma รฅt medlemmarna i strukturen.

Tillgรฅng till strukturmedlemmar

Fรถr att komma รฅt struct-medlemmarna anvรคnder vi instansen av struct- och punktoperatorn (.). Till exempel, fรถr att komma รฅt medlemsรฅldern fรถr struct Person:

p.age = 27;

Vi har nรฅtt medlemsรฅldern fรถr struct Person med hjรคlp av structs instans, sid. Vi har dรฅ satt vรคrdet pรฅ medlemsรฅldern till 27 รฅr.

Exempel 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;
}

Produktion:

Tillgรฅng till strukturmedlemmar

Hรคr รคr en skรคrmdump av koden:

Tillgรฅng till strukturmedlemmar

Code Fรถrklaring:

  1. Inkludera iostream-huvudfilen i vรฅrt program fรถr att anvรคnda funktionerna som definieras i den.
  2. Inkludera std-namnomrรฅdet fรถr att anvรคnda dess klasser utan att anropa det.
  3. Skapa en struktur med namnet Person.
  4. Bรถrjan av strukturkroppen.
  5. Skapa en strukturmedlem med namnet medborgarskap av typen heltal.
  6. Skapa en strukturmedlem med namnet รฅlder av typen heltal.
  7. Slutet pรฅ strukturkroppen.
  8. Anropa main()-funktionen. Programlogiken bรถr lรคggas till i kroppen av denna funktion.
  9. Skapa en instans av strukturen Person och ge den namnet p.
  10. Sรคtt vรคrdet pรฅ structmedlemsmedborgarskap till 1.
  11. Stรคll in vรคrdet fรถr strukturmedlemsรฅldern till 27.
  12. Skriv ut vรคrdet av structmedlemsmedborgarskapet pรฅ konsolen tillsammans med annan text.
  13. Skriv ut vรคrdet pรฅ structmedlemmens รฅlder pรฅ konsolen tillsammans med annan text.
  14. Programmet bรถr returnera ett vรคrde om det kรถrs framgรฅngsrikt.
  15. Slutet pรฅ main()-funktionen.

Tips pรฅ struktur

Det รคr mรถjligt att skapa en pekare som pekar pรฅ en struktur. Det liknar hur pekare som pekar pรฅ inbyggda datatyper som int, float, double, etc. skapas. Observera att en pekare in C++ kommer att lagra en minnesplats.

Exempel 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;
}

Produktion:

Tips pรฅ struktur

Hรคr รคr en skรคrmdump av koden:

Tips pรฅ struktur

Code Fรถrklaring:

  1. Inkludera iostream-huvudfilen i vรฅrt program fรถr att kunna anvรคnda dess funktioner.
  2. Inkludera std-namnutrymmet i vรฅrt program fรถr att anvรคnda dess klasser utan att anropa det.
  3. Skapa en struktur som heter Length.
  4. Start av strukturens kropp Lรคngd.
  5. Skapa en strukturmedlem med namnet meter med heltalsdatatyp.
  6. Skapa en strukturmedlem med namnet centimeter av typen heltal.
  7. Slutet pรฅ strukturens kropp Lรคngd.
  8. Anropa main()-funktionen.
  9. Bรถrjan av huvuddelen av funktionen main().
  10. Skapa en pekarvariabel *ptr och normalvariabel l av typen Length.
  11. Lagra adressen fรถr variabel l i vรฅr pekarvariabel.
  12. Visa ett meddelande pรฅ konsolen som ber anvรคndaren att ange vรคrdet fรถr variabla mรคtare.
  13. Lรคs vรคrdet som anvรคndaren matat in via tangentbordet. Medlemsfunktionsmรคtarna nรฅs hรคr med hjรคlp av pekarvariabeln.
  14. Visa ett meddelande pรฅ konsolen som ber anvรคndaren att ange vรคrdet fรถr variabla centimeter.
  15. Lรคs vรคrdet som anvรคndaren matat in via tangentbordet. Medlemsfunktionen centimeter nรฅs hรคr med hjรคlp av pekarvariabeln.
  16. Visa vรคrdena lรคsta frรฅn anvรคndaren pรฅ konsolen tillsammans med annan text.
  17. Programmet mรฅste returnera ett vรคrde vid framgรฅngsrikt genomfรถrande.
  18. Slutet pรฅ huvuddelen av funktionen main().

Struktur som funktionsargument

Du kan skicka en struktur till en funktion som ett argument. Detta gรถrs pรฅ samma sรคtt som att fรถra ett vanligt argument. Strukturvariablerna kan ocksรฅ skickas till en funktion. Ett bra exempel รคr nรคr du behรถver visa vรคrdena fรถr strukturmedlemmar. Lรฅt oss demonstrera detta:

Exempel 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;
}

Produktion:

Struktur som funktionsargument

Hรคr รคr en skรคrmdump av koden:

Struktur som funktionsargument

Code Fรถrklaring:

  1. Inkludera iostream-huvudfilen i vรฅr fil. Vi kommer dรฅ att anvรคnda dess funktioner utan att fรฅ fel.
  2. Inkludera std-namnomrรฅdet i vรฅrt program fรถr att anvรคnda dess klasser. Vi behรถver inte anropa namnomrรฅdet fรถr att anvรคnda dess klasser.
  3. Skapa en struktur med namnet Person.
  4. Bรถrjan av strukturpersonens kropp.
  5. Skapa en medlem i struct Person. Medlemmen heter medborgarskap och รคr av typen heltal.
  6. Skapa en medlem i struct Person. Medlemmen heter รฅlder och รคr av typen heltal.
  7. Slutet pรฅ strukturen Person.
  8. Skapa en funktion som tar instansen av struct Person, p, som argument.
  9. Ring huvudfunktionen. { markerar bรถrjan pรฅ huvuddelen av funktionen main().
  10. Skapa en instans av struct Person och ge den namnet p.
  11. Fรฅ รฅtkomst till structmedlemsvariabeln medborgarskap genom att anvรคnda instansen av struct, p, och tilldela den vรคrdet 1.
  12. Fรฅ รฅtkomst till structmedlemsvariabeln รฅlder genom att anvรคnda instansen av struct, p, och tilldela den vรคrdet 27.
  13. Anropa funktionen och skicka till den instansen av strukturen Person, p, som argument.
  14. Funktionen mรฅste returnera ett vรคrde vid framgรฅngsrik exekvering.
  15. Slutet pรฅ huvuddelen av funktionen main().
  16. Skapa huvuddelen av funktionen.
  17. Bรถrjan av kroppen av funktionen.
  18. Fรฅ tillgรฅng till struct-medlemsmedborgarskapsvรคrdet och skriv ut det pรฅ konsolen tillsammans med annan text.
  19. Fรฅ รฅtkomst till structmedlemmens รฅldersvรคrde och skriv ut det pรฅ konsolen tillsammans med annan text.
  20. Slutet pรฅ funktionskroppen.

Begrรคnsning av en C++ struktur

Fรถljande รคr begrรคnsningarna fรถr strukturer:

  • Strukturdatatypen kan inte behandlas som inbyggda datatyper.
  • OperaTors som + - och andra kan inte anvรคndas pรฅ strukturvariabler.
  • Strukturer stรถder inte att dรถlja data. Medlemmarna i en struktur kan nรฅs av vilken funktion som helst oavsett dess omfattning.
  • Statiska delar kan inte deklareras inuti strukturkroppen.
  • Konstruktรถrer kan inte skapas inuti en struktur.

Vanliga frรฅgor

In C++ En struktur och en klass รคr nรคstan identiska. Den enda egentliga skillnaden รคr standardรฅtkomst: strukturmedlemmar รคr publika som standard, medan klassmedlemmar รคr privata. Bรฅda stรถder medlemsfunktioner, konstruktorer och arv.

En AC-struktur innehรฅller bara data, och du mรฅste skriva struct fรถre varje variabeldeklaration. C++ struct kan ocksรฅ inkludera medlemsfunktioner, konstruktorer och รฅtkomstspecifikationer, och nyckelordet struct รคr valfritt vid deklaration av variabler.

Deklarera strukturen och definiera sedan en array av den, till exempel Person people[3]. Varje element รคr en fullstรคndig struktur, och du kommer รฅt medlemmar med people[0].age. Arrayer av strukturer lagrar mรฅnga poster av samma typ tillsammans.

En kapslad struktur รคr en struktur som deklareras som en medlem inuti en annan struktur. Den grupperar relaterade deldata, till exempel en Date-struktur placerad inuti en Employee-struktur. Du nรฅr inre medlemmar genom att kedja punktoperatorn.

Storleken รคr ungefรคr summan av dess medlemmar, plus utfyllnad som kompilatorn lรคgger till fรถr justering, sรฅ sizeof kan รถverstiga den rรฅa totalsumman. Medlemsfunktioner lรคgger inte till nรฅgot. Att ordna medlemmar efter storlek minskar slรถseri med utfyllnad.

Anvรคnd piloperatorn nรคr du hรฅller en pekare mot en struktur. Istรคllet fรถr (*ptr).age lรคser genvรคgen ptr->age samma element. Punktoperatorn fungerar pรฅ en direkt instans, inte en pekare.

Ja. AI-kodningsassistenter fรถrvandlar en kort uppmaning eller kommentar till en komplett C++ struktur, inklusive medlemmar, konstruktorer och fรคltรฅtkomst. Granska alltid de genererade datatyperna och justeringen, eftersom AI kan missa projektspecifika krav.

Ja. GitHub Copilot fรถreslรฅr strukturdefinitioner, medlemsvariabler och punkt- eller pilรฅtkomst medan du skriver i din editor. Den hanterar repetitiv standardtext bra, men du bรถr fortfarande verifiera typer, utfyllnad och logik innan du kompilerar.

Sammanfatta detta inlรคgg med: