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 :

C ++ 11
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;
}


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow