71
enum paytype {CARD, CHECK};
paytype ptype;
union payment{
char card[25];
long check;
} info;
/* info жəне ptype мəндерін беру */
switch (ptype){
case CARD: cout << "Карта арқылы төлеу: "
<< info.card; break;
case CHECK: cout << "Чек арқылы төлеу: "
<< info.check; break;
}
return 0;
}
Біріктірмелерді құрылым өрістері ретінде жиі қолданады, мұндайда
құрылымға əрбір мезетте біріктірменің қай элементі қолданылатынын
анықтайтын қосымша өріс енгізген ыңғайлы. Біріктірменің атын көрсетпеуге
болады, бұл мүмкіндік оның өрістеріне тікелей қол жеткізуге (пайдалануға)
болатынын білдіреді:
#include
int main(){
enum paytype {CARD, CHECK};
struct{
paytype ptype;
union{
char card[25];
long check;
};
} info;
... /* info мəнін беру */
switch (info.ptype){
case CARD: cout << "Карта арқылы төлеу: "
<< info.card; break;
case CHECK: cout << "Чек арқылы төлеу: "
<< info.check; break;
}
return 0;
}
Сонымен қатар, біріктірмелер бір биттік бейнелеуді əртүрлі интерпретация-
лау үшін де қолданылады (бірақ, мұндайда типтерді айқын түрде түрлендіруді
қолданған жөн). Мысал ретінде биттік өрістерден тұратын құрылымды
қарастырамыз:
72
struct Options{
bool centerX:1;
bool centerY:1;
unsigned int shadow: 2;
unsigned int palette: 4;
};
union {
unsigned char ch;
Options bit;
}option = {0xC4};
cout << option.bit.palette;
option.ch & = 0xF0; // маска қолдану
Құрылымдармен салыстырғанда біріктірмелерге бірқатар шектеулер
қойылады. Олардың кейбіреуінің мағынасы кейін түсінкті болады:
□ біріктірме тек алғашқы элементінің мəні арқылы инициалдана алады;
□ біріктірме құрамында биттік өрістердің болуы мүмкін емес;
□ біріктірменің құрамында виртуалды əдістердің, конструкторлардың,
деструкторлардың жəне меншіктеу операциясының болуы да мүмкін
емес;
□ біріктірме кластар иерархиясына кіре алмайды.