C++ Datenstrukturen: Ein Anfänger-Leitfaden zu Strukturen

Hallo dort, zukünftige C++-Entwickler! Heute werden wir auf eine aufregende Reise in die Welt der C++-Strukturen aufbrechen. Keine Sorge, wenn du neu in der Programmierung bist – ich werde dein freundlicher Guide sein, der komplexe Konzepte in kleine, leicht verdauliche Stücke auftrennt. Also, nimm dein Lieblingsgetränk, mache dich bequem und lasst uns einsteigen!

C++ Data Structures

Was ist eine Struktur?

Bevor wir in die Details einsteigen, beginnen wir mit den Grundlagen. Stell dir vor, du organisiert einen Party (weil wer mag keine gute Party, oder?). Du musst verschiedene Details für jeden Gast verfolgen – ihren Namen, Alter und ob sie ein Gericht mitbringen. In C++ ist eine Struktur (oder struct) wie ein Container, der alle diese verschiedenen Informationen über eine einzelne Entität (in diesem Fall ein Gast) in einem sauberen Paket halten kann.

Definition einer Struktur

Lasst uns sehen, wie wir unsere Party-Gast-Struktur in C++ erstellen können:

struct PartyGuest {
string name;
int age;
bool bringingDish;
};

Hier ist, was in diesem Code passiert:

  1. Wir beginnen mit dem Schlüsselwort struct, um C++ mitzuteilen, dass wir eine Struktur erstellen.
  2. Wir geben unserer Struktur einen Namen, PartyGuest.
  3. Innerhalb der geschweiften Klammern {}, definieren wir die Mitglieder unserer Struktur:
  • name ist eine Zeichenkette, um den Namen des Gastes zu speichern
  • age ist eine Ganzzahl für das Alter des Gastes
  • bringingDish ist ein Boolean (wahr/falsch), um anzuzeigen, ob sie ein Gericht mitbringen

Denk daran, deine Strukturdefinition mit einem Semikolon ; zu beenden. Es ist ein häufiger Fehler, dies zu vergessen, also überprüfe immer doppelt!

Zugriff auf Struktur-Mitglieder

Jetzt, da wir unsere PartyGuest-Struktur haben, sehen wir, wie wir sie verwenden können, um unsere Gäste zu verfolgen:

int main() {
PartyGuest alice;
alice.name = "Alice";
alice.age = 25;
alice.bringingDish = true;

cout << alice.name << " ist " << alice.age << " Jahre alt und ";
if (alice.bringingDish) {
cout << "bringt ein Gericht zur Party!";
} else {
cout << "bringt kein Gericht zur Party.";
}

return 0;
}

In diesem Beispiel:

  1. Wir erstellen eine PartyGuest-Variable namens alice.
  2. Wir verwenden den Punkt-Operator (.), um auf die Mitglieder von alice zuzugreifen und zu setzen.
  3. Wir verwenden dann den gleichen Punkt-Operator, um bei der Ausgabe von Informationen über Alice auf die Mitglieder zuzugreifen.

Wenn du diesen Code ausführst, wird er ausgeben:

Alice ist 25 Jahre alt und bringt ein Gericht zur Party!

Strukturen als Funktionenargumente

Strukturen werden noch mächtiger, wenn wir sie mit Funktionen verwenden. Lasst uns eine Funktion erstellen, um unsere Party-Gäste zu begrüßen:

void begrueßeGast(PartyGuest guest) {
cout << "Willkommen, " << guest.name << "! ";
if (guest.bringingDish) {
cout << "Danke, dass du ein Gericht mitbringen!";
} else {
cout << "Genieße das Essen!";
}
cout << endl;
}

int main() {
PartyGuest bob = {"Bob", 30, false};
begrueßeGast(bob);

return 0;
}

In diesem Code:

  1. Wir definieren eine Funktion begrueßeGast, die einen PartyGuest als Argument nimmt.
  2. In main(), erstellen wir einen neuen Gast bob mit einer abgekürzten Initialisierung.
  3. Wir übergeben bob an unsere begrueßeGast-Funktion.

Dies wird ausgeben:

Willkommen, Bob! Genieße das Essen!

Zeiger auf Strukturen

Jetzt sprechen wir über Zeiger. Stell dir vor, du bist der Partyplaner und möchtest in der Lage sein, Gastinformationen effizient zu aktualisieren. Zeiger ermöglichen es uns, direkt auf die ursprüngliche Struktur zuzugreifen und zu modifizieren, anstatt mit einer Kopie zu arbeiten.

void aktualisiereGastAlter(PartyGuest* guest, int neuesAlter) {
guest->age = neuesAlter;
}

int main() {
PartyGuest charlie = {"Charlie", 22, true};
cout << "Charlie's Alter vor der Aktualisierung: " << charlie.age << endl;

aktualisiereGastAlter(&charlie, 23);
cout << "Charlie's Alter nach der Aktualisierung: " << charlie.age << endl;

return 0;
}

In diesem Beispiel:

  1. Wir definieren eine Funktion aktualisiereGastAlter, die einen Zeiger auf einen PartyGuest und ein neues Alter nimmt.
  2. Wir verwenden den Pfeil-Operator ->, um auf Mitglieder einer Struktur über einen Zeiger zuzugreifen.
  3. In main(), übergeben wir die Adresse von charlie an unsere Funktion mit dem Operator &.

Dieser Code wird ausgeben:

Charlie's Alter vor der Aktualisierung: 22
Charlie's Alter nach der Aktualisierung: 23

Das Schlüsselwort typedef

Schließlich sprechen wir über typedef. Dieses Schlüsselwort ermöglicht es uns, Aliase für Datentypen zu erstellen, wodurch我们的 code lesbarer und easier zu pflegen wird.

typedef struct {
string name;
int age;
bool bringingDish;
} Gast;

int main() {
Gast david = {"David", 28, false};
cout << david.name << " ist " << david.age << " Jahre alt." << endl;

return 0;
}

In diesem Code:

  1. Wir verwenden typedef, um einen Alias Gast für unsere Struktur zu erstellen.
  2. Jetzt können wir Gast direkt verwenden, anstatt struct PartyGuest.

Dies macht unseren Code sauberer und leichter zu lesen, insbesondere wenn man mit komplexen Strukturen zu tun hat.

Schlussfolgerung

Herzlichen Glückwunsch! Du hast gerade deine ersten Schritte in die Welt der C++-Strukturen gemacht. Wir haben viel Terrain abgedeckt, von der Definition von Strukturen bis hin zu ihrer Verwendung mit Funktionen und Zeigern. Denke daran, dass Übung macht den Meister, also zögere nicht, diese Konzepte in deinem eigenen Code zu experimentieren.

Hier ist eine schnelle Referenztabelle der von uns besprochenen Methoden:

Methode Beschreibung
Definition einer Struktur struct StrukturName { /* Mitglieder */ };
Zugriff auf Mitglieder Verwende den Punkt-Operator: structVariable.member
Strukturen als Funktionenargumente Übergabe per Wert: funktionName(StrukturName variable)
Zeiger auf Strukturen Verwende Pfeil-Operator: structPointer->member
typedef Erstelle Aliase: typedef struct { /* Mitglieder */ } AliasName;

Weitercode, bleib neugierig und happy structuring!

Credits: Image by storyset