Share via


Tipos de clase anónima

Las clases pueden ser anónimas, es decir, se pueden declarar sin un identificador. Esto es útil cuando se reemplaza un nombre de clase por un nombre typedef, como en el siguiente ejemplo:

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

Nota:

El uso de las clases anónimas que se muestra en el ejemplo anterior es útil para mantener la compatibilidad con el código de C existente. En algún código de C, es frecuente el uso de typedef junto con estructuras anónimas.

Las clases anónimas también son útiles cuando se desea que una referencia a un miembro de clase aparezca como si no estuviera contenida en una clase independiente, como en el siguiente ejemplo de código:

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

PTValue ptv;

En el código anterior, se puede acceder a iValue usando el operador de selección de miembros de objeto (.) del modo siguiente:

int i = ptv.iValue;

Las clases anónimas están sujetas a determinadas restricciones. (Para más información sobre las uniones anónimas, consulte Uniones). Clases anónimas:

  • No pueden tener un constructor o un destructor.

  • No se pueden pasar como argumentos a funciones (a menos que la comprobación de tipos se rechace mediante el uso de puntos suspensivos).

  • No se pueden devolver como valores devueltos de funciones.

Structs anónimos

Específicos de Microsoft

Una extensión de Microsoft C permite declarar una variable de estructura dentro de otra estructura sin darle un nombre. Estas estructuras anidadas se denominan estructuras anónimas. C++ no permite estructuras anónimas.

Puede tener acceso a los miembros de una estructura anónima como si fueran miembros de la estructura contenedora.

// 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 Específicos de Microsoft