Yapıcı ve Yıkıcı Fonksiyon
[vc_row][vc_column][vc_column_text]
Yapıcı Fonksiyon
Yapıcı fonksiyon bir sınıftan yeni bir nesne oluşturulduğunda çalışan özel bir üye fonksiyondur.
Bir sınıfın (veya yapının) tüm üyeleri public olduğunda, sınıfı (veya struct’ı) doğrudan bir başlatma listesi veya üniform başlatma (C ++ 11’ile gelen özellik) kullanılarak başlatılabilir.
Bir yapıcı fonksiyon tanımlanırken;
- Yapıcı fonksiyonun ismi sınıfla aynı isimde olmalıdır.
- Yapıcı fonksiyonlar değişkenlere ilk değer atamak için kullanılabilir.
- Yapıcı fonksiyonun, sınıf tanımı içinde veya sınıf adı ve kapsam çözümleme :: işleci kullanılarak dış sınıf tanımında tanımlanabilir.
- Yapıcı fonksiyonların dönüş türü yoktur.
- Yapıcı fonksiyonun başına bir anahtar kelime koyulamaz.
Varsayılan olarak başlatılan constructor parametre almayan bir yapıdır.
Örnek:
#include <iostream> class kesir { private: int pay; int payda; public: kesir() // Varsayılan yapıcı fonksiyon { pay = 0; payda = 1; } /*Yukarıdaki ve aşağıdaki yapıcı fonksiyon aynı işlemdir. Aşağıdaki tanımlama C ++ 11'ile gelen bir özelliktir. Fraction():m_numerator(0),m_denominator(1){} */ int gatPay() { return pay; } int gatPayda() { return payda; } double gatDeger() { return static_cast(pay) / payda; } }; int main() { kesir Kesir; std::cout << Kesir.gatPay() << "/" << Kesir.gatPayda()<< '\n'; return 0; }
Farklı parametre alımı ile birden fazla yapıcı fonksiyon yapılabilir. İlk değer atamalarında kolaylık sağlamaktadır.
#include <assert> class Kesir { private: int pay; int payda; public: Kesir() // varsayılan constructor { pay = 0; payda = 1; } Kesir(int p_pay, int p_payda=1) { assert(p_payda != 0); p_payda = p_pay; p_payda = p_pay; } int getPay() { return m_numerator; } int gePayda() { return p_payda; } double getDeger() { return static_cast<double>(p_pay) / p_paydar; } };
Kullanımı:
int x(5); // Direkt olarak x değişkenine 5 atar Kesir nesne(5, 3); //Kesir sınıfının Kesir(int,int) olan constructor'ını çağırır.
Yıkıcı Fonksiyon
Derleyici yıkıcı fonksiyonu uygulama kapatıldığında veya nesnenin süresi dolduğunda çalıştırır. Yıkıcı fonksiyon içerisine kod yazılabilir, böylece her kaynağın temizlendiğinden emin olunmaktadır.
Bir Yıkıcı fonksiyon tanımlanırken;
- Yıkıcı fonksiyon tanımlarken sınıf adı ile aynı olmalıdır ve isimden önce ~(tilde) işareti koyulmalıdır.
- Yıkıcı fonksiyon parametre alamamaktadır.
- Yıkıcı fonksiyonunu geri dönüş tipi yoktur.
Örnek:
#include <iostream> #include <cassert> class Sayi_dizisi { private: int *dizi; int uzunluk; public: Sayi_dizisi(int uz) // constructor { assert(uz > 0); dizi = new int[uz]; uzunluk = uz; } ~Sayi_dizisi() // destructor { delete[] dizi ; } void setDeger(int index, int value) { dizi[index] = value; } int& getDeger(int index) { return dizi[index]; } int getUzunluk() { return uzunluk; } }; int main() { Sayi_dizisi dizi(10); for (int count=0; count < 10; ++count) { dizi.setDeger(count, count+1); } std::cout << "The value of element 5 is: " <<dizi.getDeger(5); return 0; }
[/vc_column_text][/vc_column][/vc_row][vc_row][vc_column width=”1/2″][vc_btn title=”Önceki Ders” color=”green” align=”left” i_icon_fontawesome=”fa fa-chevron-left” add_icon=”true” link=”url:https%3A%2F%2Fyapbenzet.org.tr%2Fcpp-dosyalari-ayirma%2F|||”][/vc_column][vc_column width=”1/2″][vc_btn title=”Sonraki Ders” color=”green” align=”right” i_align=”right” i_icon_fontawesome=”fa fa-chevron-right” add_icon=”true” link=”url:https%3A%2F%2Fyapbenzet.org.tr%2Fcpp-sinif-kapsam-alani%2F|||”][/vc_column][/vc_row]