Union

Создание объединения вызвана большими расходами памяти при возможности возврата функцией большого количества типов. Пришлось бы обьявлять перемнные для каждого возможного типа, часть из которых вообще могла не использоваться. Наиболее разумно было выделить общую память, в которой могли храниться переменные разных типов. Так и поступили.

union Имя объединения
{
Тип 1;
Тип 2;
Тип 3;
......

} Конкретное имя переменной;

Применение Union довольно специфично. Обычно оно связанно с типом данных OLE. Когда результат получения данных не ясен заранее. Подобная организация переменной реализована в типе COleVariant, который и является объединением.

#include "iostream.h"
#include "afxwin.h"

union MyUninon
{
double unVal;
int unInt;
BOOL unBool;
} MyUnionTypes;

void main()
{
MyUnionTypes.unVal=0.3;
cout << MyUnionTypes.unVal << endl;
cout << "__________________" << endl;
MyUnionTypes.unInt=1;
cout << MyUnionTypes.unVal << endl;
cout << MyUnionTypes.unInt << endl;
cout << "__________________" << endl;
MyUnionTypes.unBool=false;
cout << MyUnionTypes.unVal << endl;
cout << MyUnionTypes.unInt << endl;
cout << MyUnionTypes.unBool << endl;
}

Создайте этот пример, как Win32 Console, скомпилируйте и запустите.

В последнем присвоении вы увидите как установка unBool повлияла на unInt.