Unions
Eine union ist ein benutzerdefinierter Daten- oder Klassentyp, der zu einem beliebigen Zeitpunkt nur ein Objekt aus der Liste der Member enthält. Dieses Objekt kann ein Array oder ein Klassentyp sein).
union [tag] { member-list } [declarators]; [union] tag declarators;
Parameter
tag
Der Typname, der für die Union angegeben wurde.member-list
Liste mit den Arten von Daten, die die Union enthalten kann. Siehe Hinweise.declarators
Deklaratorliste, die die Namen der Union angibt. Weitere Informationen finden Sie unter Übersicht über Deklaratoren.
Hinweise
Die member-lis einer Union zeigt die Datenarten an, die die Union enthalten kann. Eine Union muss genügend Speicher haben, um den größten Member in der member-list enthalten zu können. Weitere Informationen finden Sie unter Union-Deklarationen (C-Programmiersprachenreferenz).
Deklarieren einer Union
Beginnen Sie die Deklaration einer Union mit dem union-Schlüsselwort und schließen Sie die Memberliste in geschweifte Klammern ein:
// declaring_a_union.cpp
union DATATYPE // Declare union type
{
char ch;
int i;
long l;
float f;
double d;
int *int_ptr;
} var1; // Optional declaration of union variable
int main()
{
}
Verwenden einer Union
Eine C++-Union ist eine eingeschränkte Form des Klassentyps. Sie kann Zugriffsspezifizierer (öffentlich, privat, geschützt), Memberdaten und Memberfunktionen, z. B. Konstruktoren und Destruktoren, enthalten. Es kann keine virtuellen Funktionen oder statischen Datenmember enthalten. Sie kann weder als Basisklasse verwendet werden, noch kann sie Basisklassen aufweisen. Der Standardzugriff von Membern in einer Union ist öffentlich.
In C++ müssen Sie das union-Schlüsselwort verwenden, um eine Union-Variable zu deklarieren.
DATATYPE var3; // C++ declaration of a union variable
Eine Variable eines Union-Typs kann einen Wert eines beliebigen Typs enthalten, der in der Union deklariert ist. Verwenden Sie den Memberauswahloperator (.), um auf einen Member einer Union zuzugreifen:
var1.i = 6; // Use variable as integer
var2.d = 5.327; // Use variable as double
Sie können eine Union in derselben Anweisung deklarieren und initialisieren, indem Sie einen Ausdruck zuweisen, der in geschweifte Klammern eingeschlossen ist. Der Ausdruck wird ausgewertet und dem ersten Feld der Union zugewiesen.
Beispiel
#include <iostream>
using namespace std;
union NumericType
{
int iValue;
long lValue;
double dValue;
};
int main()
{
union NumericType Values = { 10 }; // iValue = 10
cout << Values.iValue << '\n';
Values.dValue = 3.1416;
cout << Values.dValue);
}
Ausgabe
10
3.141600
Die NumericType-Union ist im Arbeitsspeicher angeordnet (konzeptionell), wie in der folgenden Abbildung dargestellt.
Speicherung von Daten in einer Union numerischer Typen