Birlik (Union)
Union birden fazla alanı temsil eder ve o alana ait en uzun alanın büyüklüğü kadar hafızada yer ayrilir.
union [birlik adi]
{
değişken türü <değişken adı>;
değişken türü <değişken adı>;
...
};
union dene{
int x;
char t[10];
char y[5];
}k;
Bu tanıma göre x
tamsayısı için bellekte 4 baytlık t değişkeni için 10 baytlık ve y değişkeni
için 5 baytlık yer
ayrılmıştır. En büyük değer olan 10 baytlık yer ayrılır.
1 Birlik (Union), enum, typedef
Birlik (Union)
Union’lar bir hafıza parçasının farklı veritipleri tarafından kullanılabilmesini sağlar
Tüm değişkenler tarafından kullanılan alan aslında ynıdır.
Deklarasyonu Structure gibidir, ancak kullanımı tamamen farklıdır.
union union_ismi{
ÜyedeğişkenTipi1üyeDeğişkenIsmi1;
ÜyedeğişkenTipi1üyeDeğişkenIsmi1;
…
. } nesneIsimleri
2 Birlik (Union), enum, typedef
Birlik (Union)
union union1{
char c; int i; float f;
} unionNesne1;
içinde 3 eleman bulunur:
unionNesne1.c unionNesne1.i unionNesne1.f
3 değişken farklı tipte olsalar bile aynı hafıza adresini kullanırlar
Bu nedenle birinde yapılan değişiklik tüm değişkenlere yansır
Birbirinden bağımsız 3 değer tutulması mümkün değildir.
3 Birlik (Union), enum, typedef
Anonymous Unions (İsimsiz Birlikler)
Eğer isimsiz bir birlik kullanılırsa bu birliğin elemanlarına direk olarak ulaşılabilir
2 kod arasındaki tek fark üye değişkenlere ulaşma şeklimizdir:
Sıradan Birlik içeren Structure İsimsiz Birlik içeren Structure struct {
char baslik[50];
char yazar[50];
union {
float dolar;
int lira;
} fiyat;
} kitap;
struct {
char baslik[50];
char yazar[50];
union {
float dolar;
int lira;
};
} kitapIsimsiz;
Sıradan Birlik içeren Structure İsimsiz Birlik içeren Structure kitap.fiyat.dolar
kitap.fiyat.lira kitapIsimsiz.dolar
kitapIsimsiz.lira
!!!Dikkat: dolar ve lira değerlerinin içerisine farklı değerler yüklenemez!!!
4 Birlik (Union), enum, typedef
Birlik (Union)
5 Birlik (Union), enum, typedef
Struct ve Union Tanımda Hafızada Ayrılan Yer
Neden 4 Neden 8 ? ?
6 Birlik (Union), enum, typedef
Struct ve Union Birlikte Kullanımı
7 Birlik (Union), enum, typedef
Struct ve Union Birlikte Kullanımı
katalog.kitap.yazar char tipinde, içine yazılan 65 değeri A olarak okunuyor
katalog.kitap.yazar içine kaydedilen AB
karakterleri, integer olarak okunduğu zaman, 66(B) ve 65 (A) değerlerinin 2lik düzende 8bite karşılık gelen değerleri birleştirilir ve okunur:
BA
01000001 01000010
16961
8 Birlik (Union), enum, typedef
Enum
Değişkenin alabileceği değerlerin sabit olduğu durumlarda programı daha okunabilir hale getirmek için kullanılır.
Genel yazım biçimi;
enum tip_adı{değer_1, değer_2, ...,
değer_n} değişken_adı;
tip_adı ve değişken adı; C++ dilinin
isimlendirme kurallarına uygun olarak seçilmiş bir isimdir.
9 Birlik (Union), enum, typedef
Enum
C++’ta enum türü diğer değişken türlerine göre ayrı bir türdür ve enum türünden değişkenlere ancak enum türünden sabitler atanabilir.
Enum içinde değer atayabilirsiniz. Atadığınız ilk değerden itibaren ardışık değer atama değer atamasanız bile otomatik devam edecektir.
enum para_birimi{TL=1, DOLAR, EURO}
Burada; TL=1
DOLAR=2 EURO=3
değerlerini alacaktır.
10 Birlik (Union), enum, typedef
Enum
11 Birlik (Union), enum, typedef
Enum
12 Birlik (Union), enum, typedef
typedef
C++ var olan değişken tiplerine kendi belirlediğimiz isimleri takmamıza izin verir.
Var olan değişken tiplerine takma isim veriyoruz denebilir
typedef var_olan_değişken_tipi bizim_verdigimiz_isim;
Nerede kullanılabilir:
Sıklıkla kullanılan değişken tiplerine takma isim koymak için
Programın daha sonraki versiyonlarında belli değişkenler için kullanılan değişken tipinin değişme ihtimali varsa.
Bu durumda program içinde birden çok yerde kullanılan değişken tipinin, her kullanıldığı yerde değil sadece typedef tanımlamasında değiştirilmesi yeterli olacaktır
typedef char karakter;
typedef char * kPointer;
typedef int intDizi [50];
13 Birlik (Union), enum, typedef
typedef
C++ dilinde program kodları bu deyimle tamamen
Türkçeleştirilebilir.
Yan taraftaki örnekte typedef için iki ayrı kullanım alanı
tanımlanmıştır.
14 Birlik (Union), enum, typedef
typedef
15 Birlik (Union), enum, typedef