355просмотров
15 июня 2025 г.
Score: 391
Объединения (union-ы) позволяют хранить данные разных типов в одной области памяти. Пример:
#include <iostream> union IPv4Address
{ uint32_t i; uint8_t c[4];
}; int main(int argc, char* argv<::>)
{ IPv4Address a; memset(&a, 0, sizeof(a)); a.c[0] = 10; a.c[1] = 0; a.c[2] = 0; a.c[3] = 1; std::cout << (int)a.c[0] << std::endl; std::cout << a.i << std::endl; // don't do this, just an example return 0;
} Но можно ли наследовать union? Давайте попробуем:
struct IPv4AddressWithPort : IPv4Address
{ uint16_t port = 0;
}; Получим ошибку компиляции: enum/union cannot be used as a base class Объединения нельзя использовать как базовый класс. Напишите в комментариях, кто знает почему)