Типы анонимных классов
Классы могут быть анонимными— то есть они могут быть объявлены без идентификатора. Это полезно при замене имени typedef
класса именем, как показано ниже.
typedef struct
{
unsigned x;
unsigned y;
} POINT;
Примечание.
Использование анонимных классов, показанное в предыдущем примере, полезно для поддержки совместимости с существующими кодом C. В некоторых кодах C использование в сочетании typedef
с анонимными структурами распространено.
Анонимные классы также полезны, если требуется, чтобы ссылка на член класса отображалась так, как если бы она не содержалась в отдельном классе, как показано в следующем примере.
struct PTValue
{
POINT ptLoc;
union
{
int iValue;
long lValue;
};
};
PTValue ptv;
В приведенном выше коде iValue
можно получить доступ с помощью оператора выбора элементов объекта (.) следующим образом:
int i = ptv.iValue;
Анонимные классы имеют некоторые ограничения. (Дополнительные сведения об анонимных профсоюзах см. в разделе Профсоюзы.) Анонимные классы:
Не могут иметь конструктор или деструктор.
Невозможно передать в качестве аргументов в функции (если проверка тип проверка поражение с помощью многоточия).
Не могут быть возвращены в качестве возвращаемых значений из функций.
Анонимные структуры
Блок, относящийся только к системам Майкрософт
Расширение Microsoft C позволяет объявить переменную структуры в другой структуре без указания ее имени. Эти вложенные структуры называются анонимными структурами. В C++ анонимные структуры не допускаются.
Можно получить доступ к членам анонимной структуры, как если бы они были членами содержащей их структуры.
// 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
Завершение блока, относящегося только к системам Майкрософт
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по