به یاد روزهایی که 64 کیلوبایت، مقدار زیادی حافظه برای کامپیوتر تلقی می شد، C++ امکانی برای به اشتراک گذاری حافظه بین متغیر ها فراهم کرده است. به این معنی که متغیر ها میتوانند بلوک های یکسانی از حافظه را به صورت غیر هم زمان در اختیار داشته باشند. این ویژگی Union (اجتماع) نامیده می شود و چهار وضعیت کلی برای استفاده از آن وجود دارد.

- میتوانید این کار را به گونه ای انجام دهید که (برای مثال) متغیر A بلوکی از حافظه را اشغال می کند که سپس هنگامی که به متغیر A نیازی نیست به وسیله ی متغیر B اشغال می شود. همین کار را میتوان با استفاده از اختصاص حافظه به صورت دینامیک (پویا) انجام داد و نتیجه ی یکسان گرفت.

- یا می توانید در برنامه شرایطی داشته باشید که در آن آرایه ی بزرگی از اطلاعات نیاز است ولی دقیقا نمیدانید که آن از چه نوعی خواهد بود؛ که این جا نیز می توانید این کار را با اشاره گر ها و اختصاص حافظه به صورت دینامیک انجام دهید.

- استفاده دیگری از Union میتوانید این باشد که شما الان، و سپس دوباره، _ هنگامی که میخواهید نوع یکسانی از اطلاعات را به دو یا چند شیوه ی دیگر تفسیر کنید_، به آن احتیاج داشته باشید. برای مثال هنگامی که یک متغیر از نوع long در اختیار داشته باشید و بخواهید با آن به صورت دو متغیر short رفتار کنید.

- میتوان از union به صورت وسیله ای برای فرستادن یک شی یا متغیر که دقیقا نوعش را نمی دانید، استفاده کنید. union میتواند متبعی برای ذخیره هر نوع مختلف باشد.

برای تعریف یک اجتماع از کلمه ی کلیدی union استفاده می کنیم. برای فهم بهتر یک مثال ساده را می بینیم :


union ShareVars
{
   double dValue;
   long lValue;
};


در بالا یک نوع union با نام ShareVars تعریف شده که اجازه می دهد دو متغیر dValue و lValue بلوک های یکسانی از حافظه را اشغال کنند. نام union معمولا "نام برچسب" (tag name) نامیده می شود. میبینید که تعریف بالا شبیه به تعریف یک کلاس است؛ اما هنوز نمونه ای از این union ایجاد نشده است، در نتیجه هیچ متغیری در حال حاضر وجود ندارد. هنگامی که union تعریف شد، میتوانید نمونه های (اشیائی) از آن ایجاد کنید. در زیر یک نمونه از union بالا با نام myVars ایجاد شده است.


ShareVars myVars;


خط بالا یک نمونه یا یک شی از union ی که در بالا تعریف کرده اید، ایجاد می کند. همچنین میتوان شی myVars را در درون تعریف union نیز به صورت زیر انجام دهید.

union ShareVars
{
  double dValue;
  long lValue;
  myVars;
};


برای دسترسی به متغیر های union مانند دسترسی به اعضای کلاس، از عملگر دسترسی ( . ) پس از نام شی استفاده می کنیم.


myVars.dValue = 100.545;


خط بالا متغیر dValue را مقدار دهی می کند. اگر در ادامه برنامه متغیر دیگری از union مانند lVaue را به کار ببریم متغیری فعلی override (لغو) می شود. union محدودیتی برای تعداد متغیر های تعریف شده ندارد ولی همواره یکی از آنها در حافظه موجود است. مقدار حافظه ای که توسط union اشغال می شود برابر است با حجم بزرگترین متغیر آن. در مثال بالا حافظه اشغال شده توسط ShareVars برابر است با حجم بزرگترین متغیر آن، یعنی dValue

Ivor Horton's Beginning Visual C++ 2010