Tipi di classe anonimi

Le classi possono essere anonime, ovvero possono essere dichiarate senza un identificatore. Ciò è utile quando si sostituisce un nome di classe con un typedef nome, come illustrato di seguito:

typedef struct
{
    unsigned x;
    unsigned y;
} POINT;

Nota

L'utilizzo di classi anonime illustrato con l'esempio precedente è utile per preservare la compatibilità con il codice C esistente. In un codice C, l'uso di typedef in combinazione con strutture anonime è prevalente.

Le classi anonime sono utili anche quando si desidera che un riferimento al membro di classe venga visualizzato come se non fosse contenuto in una classe separata, come illustrato di seguito:

struct PTValue
{
    POINT ptLoc;
    union
    {
        int  iValue;
        long lValue;
    };
};

PTValue ptv;

Nel codice precedente è iValue possibile accedere usando l'operatore object member-selection (.) come indicato di seguito:

int i = ptv.iValue;

Le classi anonime sono soggette a determinate restrizioni. Per altre informazioni sulle unioni anonime, vedere Unioni. Classi anonime:

  • Non possono avere un costruttore o un distruttore.

  • Non può essere passato come argomenti alle funzioni (a meno che il controllo dei tipi non venga sconfitto usando i puntini di sospensione).

  • Non possono essere restituite dalle funzioni come valori restituiti.

Struct anonimi

Sezione specifica Microsoft

Un'estensione C Microsoft consente di dichiarare una variabile di struttura in un'altra struttura senza assegnarle un nome. Queste strutture annidate vengono chiamate strutture anonime. Il linguaggio C++ non consente strutture anonime.

È possibile accedere ai membri di una struttura anonima come se fossero membri della struttura contenitore.

// anonymous_structures.c
#include <stdio.h>

struct phone
{
    int  areacode;
    long number;
};

struct person
{
    char   name[30];
    char   gender;
    int    age;
    int    weight;
    struct phone;    // Anonymous structure; no name needed
} Jim;

int main()
{
    Jim.number = 1234567;
    printf_s("%d\n", Jim.number);
}
//Output: 1234567

Fine sezione specifica Microsoft