Union, was ist das?



  • Hallo!
    Könnt ihr mir erklären, was ein "union" ist? Hab da letztens drüber gelesen, kann damit jedoch nix anfangen. Auch durch MSDN wurde mir net geholfen images/smiles/icon_sad.gif



  • Hallo,
    eine union ist eine "Platz-spar"-Klasse. Jeder Variable innerhalb einer union beginnt an der selben Adresse. Die Member überlappen sich also. Die Größe die eine union belegt, ist deshalb immer nur abhängig vom größten Element.
    Durch diese Überlappung kann natürlich immer nur einer Membervariable zu einem bestimmten Zeitpunkt ein Wert zugewiesen sein.
    Genau wie bei der struct, besitzt die union eine Standardsichtbarkeit von public.
    Unions dürfen wie Klassen und Strukturen Methode, Konstruktoren einen Destruktor besitzen. Nicht in eine Union dürfen:

    • statische Member
    • Referenzen
    • Objekte von Klassen die einen Konstruktor, Destruktor oder op= besitzen.

    Ein Beispiel:

    #include <iostream>
    using namespace std;
    
    union Beispiel
    {
        char ch;
        int i;
        float f;
        double d;
    
    };
    int main()
    {
        // ein Objekt der union anlegen
        Beispiel Fred;
    
        // die Größe von Fred ist abhängig vom größten Element
        // hier also double:
        cout << sizeof(double) << " " << sizeof(Fred) << endl;
    
        // Werte zuweisen
        Fred.ch = 'a';
        cout << Fred.ch << endl;
        Fred.d = 48.34;
        cout << Fred.d << endl;
    
        // NICHT GUT: Fred wurde als letztes für ein double verwendet.
        // Jetzt wird auf das char-Element zugegriffen. Das kann
        // ungewollte Effekte haben.
        cout << Fred.ch << endl;
    }
    


  • @Hume: Eine Union darf auch nicht:

    • Basisklasse sein
    • Was erben

    => keine virtuellen Methoden


Anmelden zum Antworten