Sdílet prostřednictvím


Anonymní typy třídy

Třídy mohou být anonymní – to znamená, že je lze deklarovat bez identifikátoru. To je užitečné, když nahradíte název typedef třídy názvem, jako v následujícím příkladu:

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

Poznámka

Použití anonymních tříd uvedené v předchozím příkladu je užitečné pro zachování kompatibility se stávajícím kódem jazyka C. V některých kódech jazyka C je použití typedef ve spojení s anonymními strukturami rozšířeno.

Anonymní třídy jsou také užitečné, pokud chcete odkazovat člena třídy, jako by nebyl obsažen v samostatné třídě (viz následující příklad):

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

PTValue ptv;

V předchozím kódu iValue lze získat přístup pomocí operátoru výběru člena objektu (.) následujícím způsobem:

int i = ptv.iValue;

Na anonymní třídy se vztahují jistá omezení. (Další informace o anonymních sjednoceních najdete v tématu Sjednocení.) Anonymní třídy:

  • Nemohou mít konstruktor ani destruktor.

  • Funkci nelze předat jako argumenty (pokud není kontrola typu poražena pomocí tří teček).

  • Nelze je vrátit jako návratové hodnoty funkcí.

Anonymní struktury

Specifické pro Microsoft

Rozšíření jazyka Microsoft C umožňuje deklarovat proměnnou struktury v jiné struktuře bez zadání názvu. Tyto vnořené struktury se nazývají anonymní struktury. Jazyk C++ nepovoluje anonymní struktury.

Ke členům anonymní struktury lze přistupovat, jako kdyby byly členy obsahující struktury.

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

END Microsoft Specific