Ricerca…


Classi senza nome

A differenza di una classe o di una struttura denominate, le classi e le strutture senza nome devono essere istanziate dove sono definite e non possono avere costruttori o distruttori.

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;

Membri anonimi

Essendo un'estensione non standard del C ++, i compilatori comuni consentono l'uso di classi come membri anonimi.

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;

Come alias di tipo

I tipi di classe senza nome possono essere utilizzati anche durante la creazione di alias di tipo, ad esempio tramite typedef e 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;

Unione anonima

I nomi dei membri di un'unione anonima appartengono allo scopo della dichiarazione di unione e devono essere distinti da tutti gli altri nomi di questo ambito. L'esempio qui ha la stessa costruzione dei membri anonimi di esempio che usano "struct" ma è conforme allo standard.

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow