Bazı durumlarda farklı tipteki verilerin aynı değişkende tutulması istenebilir. Öğrenci isim, soyisim, numara, yaş vb. bilgiler farklı türlerde olsalarda kullanım kolaylığı olması için aynı yapı altında bulunması gerekir. C++ dilinde bu tür veri yapıları tanımlanan Structure altında tutulur.
struct ogrenci{
char ad[20];
char soyad[20];
int numara;
int yas;
};
Yukarıdaki örnekte ogrenci yapısı ile tanımlanmış ve iki char türünde iki adet integer türünde veri tutan bir yapı görülmektedir. Bunda sonra ogrenci yapısı ile tanımlanan her değişken bu yapının altındaki verileri de tutacaktır.
#include <iostream>
#include <string.h>
struct ogrenci{
char ad[20];
char soyad[20];
int numara;
int yas;
};
int main() {
struct ogrenci o1={"yasin","saglam",442,34};
struct ogrenci o2;
strcpy(o2.ad,"abuzer");
strcpy(o2.soyad,"kadayif");
o2.numara=443;
o2.yas=33;
printf("%s - %s - %d - %d\n",o1.ad,o1.soyad,o1.numara,o1.yas);
printf("%s - %s - %d - %d\n",o2.ad,o2.soyad,o2.numara,o2.yas);
}
Yukarıdaki örnekte görüldüğü üzere struct veri yapılarına istenirse liste şeklinde;
struct ogrenci o1={"yasin","saglam",442,34};
ya da yapının elemanları için tek tek o2.numara=443 şeklinde veri girilebilir.
Struct yapıları iç içe kullanılarak karmaşık verilerin daha kolay seçilmesi ve işlenmesi sağlanabilir. Veritabanı normalizasyonunda olduğu gibi bir birinden farklı verilerin farklı structlarda tutulmaları efektifliği artıracaktır. aşağıdaki örneği inceleyelim;
#include <iostream>
#include <string.h>
struct gelen{
int urun_kodu;
int miktar;
};
struct giden{
int urun_kodu;
int miktar;
};
struct depo{
int urun_kodu;
char urun_ismi[20];
int miktar;
struct gelen gelen1;
struct giden giden1;
};
int main() {
struct depo d1;
d1.urun_kodu=1001;
strcpy(d1.urun_ismi,"Renkli Kalem");
d1.gelen1.urun_kodu = d1.urun_kodu;
d1.giden1.urun_kodu = d1.urun_kodu;
d1.gelen1.miktar=301;
d1.giden1.miktar=236;
d1.miktar = d1.gelen1.miktar - d1.giden1.miktar;
printf("DEPO Bilgileri\n");
printf("%d numarali %s isimli urunden %d adet bulunuyor",d1.urun_kodu,d1.urun_ismi,d1.miktar);
}