152
The boat Volna the year of the creation 2000
was sold for 39876$
9.8 Біріктірмелер (объединение – union)
Біріктірмелер – бҧл ӛрістерінің барлығы да бір адресте орналасатын қҧры-
лымның бір тҥрі. Оны сипаттау форматы да қҧрылымдардікі сияқты, тек
struct тҥйінді сӛзі орнына
union сӛзі қолданылады. Біріктірме ҧзындығы
оның ӛрістерінің ең кӛлемдісінің ҧзындығына тең болады. Әрбір уақыт
кезеңінде «Біріктірмелер» типті айнымалыда тек бір мән ғана сақталады.
Біріктірмелерді бір сәтте бір ӛріс қана пайдаланылатыны белгілі жағдайларда,
тек компьютер жадын ҥнемдеу ҥшін қолданады.
Басқаша айтқанда, біріктірмелер – бҧл әр тҥрлі уақыт кезеңдерінде әр тҥрлі
типтегі объектілер сақталатын жады аймағы. Кез келген сәтте біріктірмеде кӛп
дегеннің ӛзінде, тек бір объект сақталады, ӛйткені оның элементтері кезектесе
отырып, жадының тек бір аймағын пайдаланады. Программалаушы біріктірме-
дегі мәліметті соның типіне сәйкес элементтің аты арқылы пайдаланылуын
қадағалап отыруы тиіс. Біріктірмеге ең соңғы жазылған элементтен басқаларын
пайдалану нәтижесі анықталмаған болып саналады. Енді бір мысал қарасты-
райық.
1-мысал
#include // С++ тілі стилінде
void main ()
{ /* "карточка" немесе "чек" сияқты мәндері бар жаңа pt
типін (төлем типі) сипаттау */
enum pt {CARD, CHECK};
pt type;
union payment
{ char card[25];
long check;
} info;
type = CARD;
cout << "Input info.card: ";
cin.getline(info.card, 25);
cout << "Input info.check: ";
cin >> info.check;
switch (type)
{case CARD : cout << info.card << endl; break;
case CHECK: cout << info.check << endl; break;
}
}
Прогамманың орындалу нәтижесі (9.3-сурет):
Input info.card : My bank
9.3-сурет
153
Input info.check : 12345
90
Алынған мәннің 90 болуы біріктірме элементін пайдалану нәтижесінің анық-
талмағанын кӛрсетеді. Келесі мысалдағы біріктірмеде ең соңғы орналасқан
элемент пайдаланылады.
#include // С тілі стилінде
void main ()
{ enum pt {CARD, CHECK};
pt type;
union payment
{
char card[25];
long check;
} info;
type = CARD;
info.check = 12345;
/* Мұнда компьютер жадына соңғы болып орналасқан біріктірме
элементі пайдаланылып отыр: */
puts("Input info.card:");
gets(infо.card);
switch (type)
{ case CARD : puts(info.card); break;
case CHECK: printf ("%d",info.check); break;
}
}
Программаның орындалу нәтижесі
(9.4-сурет):
Input info.card:
My bank
My bank
Press any key to continue
Бҧл программада дҧрыс нәтиже алынды.
Келесі мысал біріктірмелерді дҧрыс пайдалану жауапкершілігі толығынан
программалаушыда жатқанын кӛрсетеді.
#include // С++ тілі стилінде
union Number
{
int x;
float y;
};
void main()
9.4-сурет