Freigeben über


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

Speicherung von Daten in einer Union numerischer Typen

Siehe auch

Referenz

Klassen, Strukturen und Unions

C++-Schlüsselwörter

Anonyme Unions

class (C++)

struct (C++)