CLASSES vs STRUCTS
Yapılar birçok özellik bakımından sınıflara benzemektedirler. Fakat verilerin tutuldukları alanlar birbirinden ayrılır ve en önemli farkları da budur. Yapılar stack (yığın) alanında tutulurken sınıflar heap (öbek) alanında tutulur. Bu sebep ile yapılar belli büyüklükteki verileri tutabilir. Çünkü stack alanı çok sınırlı bir veri alanıdır. Büyük veriler stack alanına yüklenmeye çalışıldığında stack overflow olarak adlandırılan yığın taşması meydana gelir.
Özellikle metodlara veriler aktarırken bu verileri sınıf içerisinde tanımladığımızda, tüm veriler metoda aktarılacağını sadece bu verilerin öbekteki başlangıç adresi aktarılır ve ilgili parametrenin de bu adresteki verilere işaret etmesi sağlanmış olur. Böylece büyük boyutlu verileri stack'ta kopyalayarak gereksiz miktarda bellek harcanmasının önüne geçilmiş olunur. Ancak küçük boyutlarda veriler ile çalışırken bu verileri sınıflar içerisinde kullandığımızda bu kezde gereksiz yere bellek kullanıldığı öbek şişer ve performans düşer. Bu konudaki uzman görüş 16 byte'tan küçük veriler için yapıların kullanılması, 16 byte'tan büyük veriler için ise sınıfların kullanılmasıdır.
Diğer taraftan yapılar ile sınıflar arasında başka farklılıklarda vardır. Örneğin bir yapı için varsayılan yapıcı metod (default constructor) yazamayız. Derleyici hatası alırız. Ancak bu değişik sayıda parametreler alan yapıcılar yazmamızı engellemez. Oysaki sınıflarda istersek sınıfın varsayılan yapıcı metodunu kendimiz yazabilmekteyiz. l
Bir yapı içersinde yer alan constructor metod(lar) içinde tanımlamış olduğumuz alanlara başlangıç değerlerini atamak zorundayız. Oysaki bir sınıftaki constructor(lar) içinde kullanılan alanlara başlangıç değerlerini atamaz isek, derleyici bizim yerimize sayısal değerlere 0, boolean değerlere false vb... gibi başlangıç değerlerini kendisi otomatik olarak yapar. Ancak derleyici aynı işi yapılarda yapmaz. Bu nedenle bir yapı içinde kullandığımız constructor(lar)daki tanımlamış olduğumuz alanlara mutlaka ilk değerlerini vermemiz gerekir.
Yapı kullanımı sınıf kullanımına göre erişim hızı bakımından yüksek ve daha az maliyetlidir.
Birden fazla struct'ı iç içe kullanabiliriz. Bu duruma Nested Structures denir.
- Struct: Kendiliğinden değiştirilmeden halinde (default) public öğelere sahiptir. Çok nesneye dayalı işlem içermeyen, düz yapılarınız için bunu kullanabilirsiniz.
- Class: Kendiliğinden değiştirilmeden halinde (default) private öğelere sahiptir. Yapılar arasında işlem yapıldığında, öğeler arasında fonksiyonel aksiyonlara ihtiyaç duyduğunuzda bunu kullanabilirsiniz.
GELECEK KONULAR
Dönüştüren kurucu fonksiyon "(conversion constructor) nedir?
(Tür dönüştürme operatör fonksiyonları (type-cast operator functions) nedir?
Smart Pointer Nedir?
make_unique nedir?
No comments:
Post a Comment