struct vereinbart, in der ein union
enthalten ist, dann braucht die union einen eigenen Namen innerhalb
der struct, über den ihre Elemente angesprochen werden.
Beispiel: Eine etwas schlicht veranlagte Partnervermittlung möchte ihre Kunden möglichst platzsparend speichern, und möchte bei männlichen und weiblichen Kunden nur das für die erfolgreiche Vermittlung wichtigste Merkmal anlegen. Dies könnte so aussehen:
/* Time-stamp: "31.10.04 09:44 union1c.c klaus@wachtler.de"
*/
#include <stdio.h>
struct kunde
{
char
*vorname,
*nachname;
union
{
int koerbchengroesse;
double einkommen;
} dummy_union;
};
int main()
{
struct kunde
frau,
mann;
frau.dummy_union.koerbchengroesse = 'B';
mann.dummy_union.einkommen = 1500.00;
return 0;
}
In C++ ist diese Regel gelockert: Man kann den Namen der union
weglassen (anonyme union)
und kann dann die Elemente der union wie Elemente der struct
ansprechen:
// Time-stamp: "(15.11.01 12:03) union1.cpp [Klaus Wachtler (aw38)]"
struct kunde
{
char
*vorname,
*nachname;
union
{
int koerbchengroesse;
double einkommen;
};
};
int main()
{
kunde
frau,
mann;
frau.koerbchengroesse = 'B';
mann.einkommen = 1500.00;
}
Das ist in C++ möglich, weil die Elemente der anonymen union im selben
Namensraum liegen, wie die der struct. Dies heißt aber umgekehrt,
daß die Elementnamen eindeutig unterscheidbar sein müssen.
Allerdings ist es nicht möglich, innerhalb der anonymen union eine
ebenfalls anonyme struct anzulegen; hier ist dann doch wieder
eine zusätzlicher Name erforderlich:
// Time-stamp: "(15.11.01 12:03) union2.cpp [Klaus Wachtler (aw38)]"
enum haarfarbe_e
{
blond, rot, dunkel
};
struct kunde
{
char
*vorname,
*nachname;
union
{
struct
{
int koerbchengroesse;
enum haarfarbe_e haarfarbe;
} weiblich;
double einkommen;
};
};
int main()
{
kunde
frau,
mann;
frau.weiblich.koerbchengroesse = 'B';
frau.weiblich.haarfarbe = blond;
mann.einkommen = 1500.00;
}