Nesneye Yönelik Programlama (OOP) 7.Hafta
Örnek :
Yapılar vs Sınıflar Yapılar ve sınıflar büyük oranda benzerlik gösterirler. Yapıların sakladığı veriler her zaman public yani erişime açıktır. Sınıflarda ise verileri public, private veya protected olarak tanımlayabilirsiniz. Veri saklama/gizleme 'nin önem taşıdığı noktalarda sınıf kullanılmalıdır.
C++ programlama dilince sınıflar class anahtar sözcüğü ile tanımlanır. class sınıf_adı{ private: //Private veri ve fonksiyonlar public: //Public veri ve fonksiyonlar } proteted: //Protected veri ve fonksiyonlar
Bir sınıf içerisinde tanımlanın veri veya fonksiyonun programın diğer bölümleri tarafından erişilmesi isteniyorsa public anahtar kelimesi mutlaka belirtilmelidir. Herhangi bir tanımlama yapılmazsa program içerisinde belirtilen tüm bölgelerin private olduğu varsayılır. Yani sadece o sınıfın üyesi fonksiyonlar tarafından kullanılabilir. Bir sınıf nesnesi yoluyla nokta operatörü kullanılarak o sınıfın private ve protected olan bölümlerine erişelemez. Bu olay kapsülleme olarak bilinir. Kapsülleme, herhangi bir nesnenin metolarını, verilerini diğer nesnelerden saklayarak veya kullanımını sınıflandırarak yanlış kullanımlardan koruyan bir konsepttir.
Sınıf İçinde Yerel Fonksiyonların Tanımlanması
Sınıf içinde yerel fonksiyon tanımlanırken class anahtar sözcüğü ile başlayan sınıf tanımı içerisine yerleştirilir.
Sınıf İçinde Genel Fonksiyonların Tanımlanması
Sınıf içinde genel fonksiyon tanımlanırken fonksiyon sınıf bildiriminin dışına taşınır. Bu durumda sınıf tanımı içinde fonksiyonun bir prototipine yer verilir. Üye fonksiyonun hangi sınıfın üyesi olduğunu bildirmek için :: kullanılır.
Kurucu (Constructor) ve Yok Edici (Destructor) Fonksiyonlar Kurucu fonksiyon, sınıf adı ile aynı isme sahip olan, herhangi bir geri dönüş tipi olmayan fonksiyondur ve nesne bildirimi gerçekleştirildiği anda otomatik olarak çağırılır. Örneğin, sınıf içindeki değişkenlere ilk değer ataması yapılmak isteniyorsa bu işlem kurucu fonksiyon içerisinde yapılmalıdır.
Nesnenin yok edilmesi esnasında ise yok edici fonksiyon çalıştırılır. Böylece nesnenin bellekte işgal ettiği alan boşaltılmış olur. Yok edici fonksiyon da sınıf adı ile aynı isme sahiptir ancak fonksiyon isminin başında ~ işareti bulunur.
Önemli Not : Eğer sınıf içerisinde herhangi bir işaretçi tanımlanmışsa yok edici (destructor) fonksiyonu çağırıldığında işaretçinin hafızada kapladığı alan serbest bırakılmaz. Eğer sınıftan bir nesne örneği new operatörü ile aşağıdaki şekilde oluşturulmuşsa yok edici fonksiyon çağırıldığında nesnenin hafızada kapladığı alan serbest bırakılmaz. kure *kure1 = new kure; Bu durumda program sonlandığında işaretçilerin hafızada kapladığı alanın boşaltılması için delete operatörü kullanılmalıdır. delete kure1;
Nesne new operatörü ile oluşturulduğundan yok edici fonksiyon program sonunda çalıştırılmadı. Bu nedenle test çıktısını üreten satır çalıştırılmadı. Böylece nesnenin hafızada kapladığı alanın serbest bırakılmadığını anlayabiliriz.
delete kure1; satırı kure sınıfının yok edici fonksiyonunu çalıştırdı. test ekran çıktısını üreten satır çalıştı. Böylece nesnenin hafızada kapladığı alan serbest bırakıldı.