Sök…


Namnlösa klasser

Till skillnad från en klass eller struktur, måste namngivna klasser och strukturer instanseras där de definieras och kan inte ha konstruktörer eller förstörare.

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;

Anonyma medlemmar

Som en icke-standardförlängning till C ++ tillåter vanliga kompilatorer användning av klasser som anonyma medlemmar.

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;

Som ett typ alias

Namnlösa klasstyper kan också användas när du skapar typalias, dvs. via typedef och 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;

Anonym union

Medlemsnamn på en anonym fack tillhör omfattningen av fackförklaringen och måste vara distinkta till alla andra namn på detta område. Exemplet här har samma konstruktion som anonyma medlemmar som använder "strukt" men är 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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow