Bu yazımda Struct (Yapı) ve Class (Sınıf) arasındaki farklara ve hangi durumda hangisinin kullanılması gerektiğine dair bir şeyler anlatmayı planlıyorum...
Yazımın devamında yer yer:Class --> SınıfStruct --> Yapıolarak isimlendirilecektir.
Öncelikle belirtmek gerekir ki yapılar, sınıfların hafif versiyonlarıdır. Yapılar değer türleridir ve yerleşik türler gibi davranan nesneler oluşturmak için kullanılabilir.
TANIMLAR
STRUCT NEDİR?
Struct (yapı), bir bellek bloğunda tek bir ad altında fiziksel olarak gruplandırılmış değişkenler listesini tanımlayan ve farklı değişkenlere tek bir işaretçi (pointer) aracılığıyla erişilmesine izin veren bileşik bir veri türüdür. Yapılar veri tipi, başka veri türlerini içerebilir. Bu nedenle dosya uzunluğu, ad, uzantı… veya diğer karma türdeki kayıtlar gibi karma veri türü kayıtları için kullanılır.
CLASS NEDİR?
Class (sınıf), Nesne Yönelimli Programlama dillerinde nesnelerin özelliklerini, davranışlarını ve başlangıç durumlarını tanımlamak için kullanılan şablonlara verilen addır. Bir sınıftan türetilmiş bir nesne ise o sınıfın örneği olarak tanımlanır. Sınıflar genelde şahıs, yer ya da bir nesnenin ismini temsil ederler.
PEKİ YA FARKLARI?
- Yapılar, varsayılan bir constructor (kurucu metot) veya bir yıkıcıya sahip olamaz.
- Yapılar değer türleridir ve atamada kopyalanır.
- Yapılar değer türleridir, sınıflar ise referans türleridir.
- Yapılar, “new” operatörü kullanılmadan başlatılabilir.
- Bir yapı, başka bir yapı veya sınıftan miras alamaz (inheritence)ve bir sınıfın temeli olamaz.
- Struct bir temel sınıf olamaz. Bu nedenle, Struct türleri soyutlanamaz (abstraction) ve her zaman örtük olarak mühürlenir (sealed).
- Soyut ve mühürlü değiştiricilere izin verilmez ve yapı üyesi korunamaz veya dahili olarak korunamaz.
- Bir yapıdaki işlev üyeleri soyut (abstract) veya sanal (virtual) olamaz
- Bir yapı, arayüzleri (interface) implement edebilir.
- Bir yapı, null yapılabilir bir tür olarak kullanılabilir ve bir boş değer atanabilir.
YAPILAR NE ZAMAN KULLANILIR?
Bu soruyu cevaplamak için, farklılıkları iyi anlamamız gerekir.
ÖRNEK;
struct MyStruct{public:int x,y;DoSomething(int x, int y){this.x = x;this.y = y;}}MyStruct myStruct1;myStruct1.DoSomething(15,15);MyStruct myStruct2;myStruct2.DoSomething(mySturct1.x, myStruct1.y);myStruct1.x = 100;std:: cout << myStruct2.x;
Bu programı çalıştırdığınızda çıktı 15 olacaktır.
“myStruct2” değeri “myStruct1”in bir kopyasıdır, bu nedenle “myStruct2”, “myStruct1.x” değişikliğinden etkilenmez. Ancak sınıfta “myStruct1” ve “myStruct2” aynı nesneye başvuracağı için çıktı 100 olacaktır.
Hiç yorum yok:
Yorum Gönder
Görüş ve Düşüncelerinizi Bizimle Paylaşmayı Unutmayın.