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:
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:
Vorteile von Strukturen:
- Einfache Datenkapselung: geeignet zum Kapseln einfacher Daten verschiedener Typen, wird üblicherweise zur Datenspeicherung verwendet.
- Leichtgewichtig: verglichen mit
class, 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
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
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
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 zwei
BooksObjekte vom TypBook1undBook2。Nutzung
&Operator, um die Adressen der beiden Objekte zu ermitteln und sie den Zeigern zuzuweisenptrBook1undptrBook2。Aufruf
printBookInfoBeim Ü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
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();
}