C++ Struktur (struct)

C/C++-Arrays erlauben die Definition von Variablen, die Datenelemente desselben Typs speichern können, aberStrukturist ein weiterer benutzerdefinierter verfügbarer Datentyp in C++, mit dem Sie Datenelemente unterschiedlicher Typen speichern können.

Strukturen werden verwendet, um einen Datensatz darzustellen. Angenommen, Sie möchten die Dynamik von Büchern in einer Bibliothek verfolgen; möglicherweise müssen Sie die folgenden Attribute jedes Buches verfolgen:

  • Titel: Titel
  • Autor: Autor
  • Thema: Kategorie
  • Buch-ID: die ID des Buches

Struktur definieren

In C++ wird die struct-Anweisung verwendet, um eine Struktur zu definieren.

Eine Struktur ist ein benutzerdefinierter Datentyp, der verwendet wird, um Daten unterschiedlicher Typen zu kombinieren. Ähnlich wie Klassen ermöglichen Strukturen das Definieren von Membervariablen und Memberfunktionen.

Um eine Struktur zu definieren, müssen Sie diestruct-Anweisung verwenden. Die struct-Anweisung definiert einen neuen Datentyp mit mehreren Membern; das Format der struct-Anweisung ist wie folgt:

struct type_name { member_type1 member_name1; member_type2 member_name2; member_type3 member_name3; . . } object_names;

type_nameist der Name des Strukturtyps,member_type1 member_name1ist eine Standardvariablendefinition, zum Beispielint i;oderfloat f;oder andere gültige Variablendefinitionen. Am Ende der Strukturdefinition, vor dem letzten Semikolon, können Sie eine oder mehrere Strukturvariablen angeben; dies ist optional. Das Folgende deklariert einen StrukturtypBooks, die Variable istbook:

struct Books { char title[50]; char author[50]; char subject[100]; int book_id; } book;

Vorteile von Strukturen:

  • Einfache Datenkapselung: geeignet zum Kapseln einfacher Daten verschiedener Typen, wird üblicherweise zur Datenspeicherung verwendet.
  • Leichtgewichtig: verglichen mitclass, ist die Syntax von Strukturen prägnanter und für kleine Datenobjekte geeignet.
  • Objektorientierte Unterstützung: unterstützt Konstruktoren, Memberfunktionen und Zugriffskontrolle und ermöglicht objektorientiertes Design.

Zugriff auf Strukturmitglieder

Um auf die Mitglieder einer Struktur zuzugreifen, verwenden wirMitgliedszugriffsoperator (.). Der Mitgliedszugriffsoperator ist ein Punkt zwischen dem Namen der Strukturvariablen und dem Strukturmitglied, auf das wir zugreifen möchten.

Das folgende Beispiel demonstriert die Verwendung von Strukturen:

Beispiel

#include <iostream> #include <cstring> using namespace std; // Einen Strukturtyp Books deklarieren struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; int main( ) { Books Book1; // Definiere eine Variable Book1 vom Strukturtyp Books Books Book2; // Definieren Sie eine Variable Book2 vom Strukturtyp Books // Book1-Details strcpy( Book1.title, "C++-Tutorial"); strcpy( Book1.author, "Beispiel"); strcpy( Book1.subject, "Programmiersprache"); Book1.book_id = 12345; // Book2-Details strcpy( Book2.title, "CSS-Tutorial"); strcpy( Book2.author, "Beispiel"); strcpy( Book2.subject, "Front-End-Technologie"); Book2.book_id = 12346; // Book1-Informationen ausgeben cout << "Titel des ersten Buches:" << Book1.title <<endl; cout << "Autor des ersten Buches:" << Book1.author <<endl; cout << "Kategorie des ersten Buches:" << Book1.subject <<endl; cout << "Erste Buch-ID:" << Book1.book_id <<endl; // Book2-Informationen ausgeben cout << "Titel des zweiten Buchs:" << Book2.title <<endl; cout << "Autor des zweiten Buchs:" << Book2.author <<endl; cout << "Kategorie des zweiten Buchs:" << Book2.subject <<endl; cout << "Zweite Buch-ID:" << Book2.book_id <<endl; return 0; }

Das Beispiel definiert den Strukturtyp Books und seine beiden Variablen Book1 und Book2. Wenn der obige Code kompiliert und ausgeführt wird, erzeugt er die folgenden Ergebnisse:

第一本书标题 : C++ 教程
第一本书作者 : Example
第一本书类目 : 编程语言
第一本书 ID : 12345
第二本书标题 : CSS 教程
第二本书作者 : Example
第二本书类目 : 前端技术
第二本书 ID : 12346

Strukturen als Funktionsparameter

Sie können eine Struktur als Funktionsparameter übergeben, ähnlich wie Variablen oder Zeiger anderer Typen. Sie können die Methode im obigen Beispiel verwenden, um auf Strukturvariablen zuzugreifen:

Beispiel

#include <iostream> #include <cstring> using namespace std; void printBook( struct Books book ); // Deklariere einen Strukturtyp Books struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; int main( ) { Books Book1; // Definiere eine Variable Book1 vom Strukturtyp Books Books Book2; // Definiere eine Variable Book2 vom Strukturtyp Books // Details zu Book1 strcpy( Book1.title, "C++-Tutorial"); strcpy( Book1.author, "Beispiel"); strcpy( Book1.subject, "Programmiersprache"); Book1.book_id = 12345; // Book2-Details strcpy( Book2.title, "CSS-Tutorial"); strcpy( Book2.author, "Beispiel"); strcpy( Book2.subject, "Front-End-Technologie"); Book2.book_id = 12346; // Book1-Informationen ausgeben printBook( Book1 ); // Book2-Informationen ausgeben printBook( Book2 ); return 0; } void printBook( struct Books book ) { cout << "Buchtitel:" << book.title <<endl; cout << "Buchautor:" << book.author <<endl; cout << "Buchkategorie:" << book.subject <<endl; cout << "Buch-ID:" << book.book_id <<endl; }

Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:

书标题 : C++ 教程
书作者 : Example
书类目 : 编程语言
书 ID : 12345
书标题 : CSS 教程
书作者 : Example
书类目 : 前端技术
书 ID : 12346

Detaillierte Einführung in die verschiedenen Teile einer Struktur

  • struct-Schlüsselwort:wird verwendet, um eine Struktur zu definieren; es teilt dem Compiler mit, dass das Folgende ein benutzerdefinierter Typ ist.

  • Membervariablen:Membervariablen sind Datenelemente, die in einer Struktur definiert sind; sie können einen beliebigen Basistyp oder andere benutzerdefinierte Typen haben. In einem struct sind diese Member standardmäßig öffentlich und es kann direkt auf sie zugegriffen werden.

  • Memberfunktionen:Strukturen können auch Memberfunktionen enthalten, wodurch sie funktional ähnlich wie Klassen sind. Memberfunktionen können mit den Membervariablen der Struktur arbeiten und bieten Kapselung und Manipulation von Daten.

  • Zugriffsberechtigungen:Ähnlich wie bei class können Sie public, private und protected in struct verwenden, um Zugriffsberechtigungen für Member zu definieren. In struct sind alle Member standardmäßig public, während sie in class standardmäßig private sind.

Zeiger auf eine Struktur

Sie können Zeiger auf Strukturen in ähnlicher Weise definieren wie Zeiger auf Variablen anderer Typen, wie unten gezeigt:

struct Books *struct_pointer;

Der obige Code definiert einen Zeiger struct_pointer auf die Struktur Books.

Jetzt können Sie die Adresse einer Strukturvariablen in der oben definierten Zeigervariablen speichern. Um die Adresse einer Strukturvariablen zu ermitteln, setzen Sie den&Operator vor den Strukturnamen, wie unten gezeigt:

struct_pointer = &Book1;

Der obige Code weist struct_pointer die Adresse der Strukturvariablen Book1 zu.

Um auf die Mitglieder einer Struktur über einen Zeiger auf diese Struktur zuzugreifen, müssen Sie den->-Operator verwenden, wie unten gezeigt:

struct_pointer->title;

Der obige Code greift über struct_pointer auf das Mitglied title der Struktur Book1 zu.

Lassen Sie uns einen Strukturzeiger verwenden, um das obige Beispiel umzuschreiben; das wird Ihnen helfen, das Konzept der Strukturzeiger zu verstehen:

Beispiel

#include <iostream> #include <string> using namespace std; // Strukturtyp Books deklarieren struct Books { string title; string author; string subject; int book_id; // Konstruktor Books(string t, string a, string s, int id) : title(t), author(a), subject(s), book_id(id) {} }; // Funktion zum Ausgeben von Buchinformationen, nimmt einen Zeiger auf die Struktur Books entgegen void printBookInfo(const Books* book) { cout << "Buchtitel:" << book->title << endl; cout << "Buchautor:" << book->author << endl; cout << "Buchkategorie:" << book->subject << endl; cout << "Buch-ID:" << book->book_id << endl; } int main() { // Zwei Buchobjekte erstellen Books Book1("C++-Tutorial", "Beispiel", "Programmiersprache", 12345); Books Book2("CSS-Tutorial", "Beispiel", "Frontend-Technologie", 12346); // Verwende Zeiger, um auf die Objekte dieser beiden Bücher zu zeigen Books* ptrBook1 = &Book1; Books* ptrBook2 = &Book2; // Buchinfos ausgeben, Zeiger übergeben printBookInfo(ptrBook1); printBookInfo(ptrBook2); return 0; }

Beschreibung:

  • Strukturdefinition:BooksDie Definition der Struktur ist dieselbe wie zuvor und enthälttitle、author、subjectundbook_idvier Membervariablen, und es gibt einen Konstruktor zum Initialisieren dieser Member.

  • printBookInfoFunktion: Nun akzeptiert diese Funktion einen Zeiger aufBooksZeiger auf eine Strukturconst Books* book. Innerhalb der Funktion verwenden wir->Operator, um auf die Membervariable zuzugreifen, auf die der Strukturzeiger zeigt.

  • mainFunktion:

    • Es wurden zweiBooksObjekte vom TypBook1undBook2。

    • Nutzung&Operator, um die Adressen der beiden Objekte zu ermitteln und sie den Zeigern zuzuweisenptrBook1undptrBook2。

    • AufrufprintBookInfoBeim Übergeben an die Funktion wird ein Zeiger aufBooksZeiger auf ein Objekt.

Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:

书籍标题: C++ 教程
书籍作者: Example
书籍类目: 编程语言
书籍 ID: 12345
书籍标题: CSS 教程
书籍作者: Example
书籍类目: 前端技术
书籍 ID: 12346

typedef-Schlüsselwort

Nachfolgend finden Sie eine einfachere Möglichkeit, eine Struktur zu definieren: Sie können dem erstellten Typ einen Alias geben. Zum Beispiel:

typedef struct Books
{
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
}Books;

Jetzt können Sie direktBooksverwenden, umBooksVariablen dieses Typs zu definieren, ohne das Schlüsselwort struct zu benötigen. Hier ist ein Beispiel:

Books Book1, Book2;

Sie können das Schlüsselworttypedefverwenden, um Nicht-Struktur-Typen zu definieren, wie unten gezeigt:

typedef long int *pint32;
 
pint32 x, y, z;

x, y und z sind alle Zeiger auf long int.


Unterschiede zwischen Strukturen und Klassen

In C++ sind struct und class im Wesentlichen sehr ähnlich; der einzige Unterschied ist die standardmäßige Zugriffsberechtigung:

  • structStandardmäßiger Member-Zugriff und Vererbung werdenpublic。
  • classStandardmäßiger Member-Zugriff und Vererbung werdenprivate。

Sie könnenstructbehandelt als eine vereinfachte Form vonclass, geeignet für einfache Datenkapselung ohne zu viele komplexe Features.

Kombination von Strukturen mit Funktionen

Sie können eine Struktur über einen Konstruktor initialisieren und eine Struktur auch per Referenz übergeben, um unnötige Kopien zu vermeiden.

Beispiel

struct Books {
    string title;
    string author;
    string subject;
    int book_id;

    // Konstruktor
    Books(string t, string a, string s, int id)
        : title(t), author(a), subject(s), book_id(id) {}

    void printInfo() const {
        cout << Buchtitel: << title << endl;
        cout << Buchautor: << author << endl;
        cout << Buchkategorie: << subject << endl;
        cout << Buch-ID: << book_id << endl;
    }
};

void printBookByRef(const Books& book) {
    book.printInfo();
}
Weitere Erweiterungen