Types de classes anonymes

Les classes peuvent être anonymes, c’est-à-dire qu’elles peuvent être déclarées sans identificateur. Cela est utile lorsque vous remplacez un nom de classe par un typedef nom, comme dans les éléments suivants :

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

Remarque

L'utilisation de classes anonymes indiquée dans l'exemple précédent est utile pour conserver la compatibilité avec un code C existant. Dans un code C, l’utilisation de typedef structures anonymes est répandue.

Les classes anonymes sont également utiles lorsque vous souhaitez qu'une référence à un membre de classe apparaisse comme si elle n'était pas été contenue dans une classe distincte, comme dans l'exemple suivant :

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

PTValue ptv;

Dans le code précédent, iValue vous pouvez accéder à l’aide de l’opérateur de sélection de membre d’objet (.) comme suit :

int i = ptv.iValue;

Les classes anonymes sont soumises à certaines restrictions. (Pour plus d’informations sur les syndicats anonymes, consultez Unions.) Classes anonymes :

  • Ne peut pas avoir de constructeur ou de destructeur.

  • Impossible de passer en tant qu’arguments aux fonctions (sauf si le type case activée ing est vaincu à l’aide de points de suspension).

  • Ne peut pas être retourné comme valeurs de retour à partir des fonctions.

Structs anonymes

Section spécifique à Microsoft

Une extension Microsoft C vous permet de déclarer une variable de structure dans une autre structure sans lui donner un nom. Ces structures imbriquées sont appelées des structures anonymes. C++ n'autorise pas les structures anonymes.

Vous pouvez accéder aux membres d'une structure anonyme comme s'ils étaient des membres de la structure conteneur.

// 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

FIN de la section spécifique à Microsoft