C++
Unbenannte Typen
Suche…
Unbenannte Klassen
Im Gegensatz zu einer benannten Klasse oder Struktur müssen unbenannte Klassen und Strukturen dort definiert werden, wo sie definiert sind, und können keine Konstruktoren oder Destruktoren enthalten.
struct {
int foo;
double bar;
} foobar;
foobar.foo = 5;
foobar.bar = 4.0;
class {
int baz;
public:
int buzz;
void setBaz(int v) {
baz = v;
}
} barbar;
barbar.setBaz(15);
barbar.buzz = 2;
Anonyme Mitglieder
Als nicht standardmäßige Erweiterung für C ++ ermöglichen gängige Compiler die Verwendung von Klassen als anonyme Member.
struct Example {
struct {
int inner_b;
};
int outer_b;
//The anonymous struct's members are accessed as if members of the parent struct
Example() : inner_b(2), outer_b(4) {
inner_b = outer_b + 2;
}
};
Example ex;
//The same holds true for external code referencing the struct
ex.inner_b -= ex.outer_b;
Als Typ-Alias
Unbenannte Klassentypen können auch verwendet werden , wenn Typ - Aliasnamen erstellen, dh über typedef
und using
:
using vec2d = struct {
float x;
float y;
};
typedef struct {
float x;
float y;
} vec2d;
vec2d pt;
pt.x = 4.f;
pt.y = 3.f;
Anonyme Union
Mitgliedsnamen einer anonymen Gewerkschaft gehören zum Geltungsbereich der Gewerkschaftserklärung und müssen sich von allen anderen Namen dieses Geltungsbereichs unterscheiden. Das Beispiel hier hat den gleichen Aufbau wie das Beispiel Anonyme Mitglieder , die "struct" verwenden, ist jedoch standardkonform.
struct Sample {
union {
int a;
int b;
};
int c;
};
int main()
{
Sample sa;
sa.a =3;
sa.b =4;
sa.c =5;
}