Anonyma klasstyper

Klasser kan vara anonyma, det vill ex. de kan deklareras utan identifierare. Detta är användbart när du ersätter ett klassnamn med ett typedef namn, som i följande:

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

Anmärkning

Användningen av anonyma klasser som visas i föregående exempel är användbar för att bevara kompatibiliteten med befintlig C-kod. I vissa C-kod är användningen av typedef tillsammans med anonyma strukturer utbredd.

Anonyma klasser är också användbara när du vill att en referens till en klassmedlem ska visas som om den inte fanns i en separat klass, som i följande:

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

PTValue ptv;

I föregående kod iValue kan du komma åt med hjälp av objektmedlemsvalsoperatorn (.) på följande sätt:

int i = ptv.iValue;

Anonyma klasser omfattas av vissa begränsningar. Mer information om anonyma fackföreningar finns i Fackföreningar. Anonyma klasser:

  • Det går inte att ha en konstruktor eller destructor.

  • Det går inte att skicka som argument till funktioner (såvida inte typkontrollen besegras med hjälp av ellips).

  • Det går inte att returnera som returvärden från funktioner.

Anonyma structs

Microsoft-specifik

Med ett Microsoft C-tillägg kan du deklarera en strukturvariabel i en annan struktur utan att ge den ett namn. Dessa kapslade strukturer kallas anonyma strukturer. C++ tillåter inte anonyma strukturer.

Du kan komma åt medlemmarna i en anonym struktur som om de vore medlemmar i den innehållande strukturen.

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

Avsluta Microsoft Specifik