C++ Yapıcı Fonksiyon (Constructor)

Sınıflarla ilgili ilk iki yazıda kurucu fonksiyonlar hakkında herhangi bir şeyden bahsetmemiştik. Ancak o iki yazıda bulunan her örnekte kurucu fonksiyon aslında kullanılmıştır, tabi bundan şu ana kadar bizim haberimiz yoktu 💤. Çünkü kurucu fonksiyon, sınıflarla beraber varsayılan olarak tanımlanmıştır. Peki neden? Bunun nedeni nesne oluşturabilmekten geçiyor. Kurucu fonksiyon nesnenin sınıf alanlarına(değişkenlerine) ilk değer atamasını yapıyor. Yani nesne oluşturulduğu anda kurucu fonksiyonda otomatikman çağrılmış oluyor.

Varsayılan olarak çağırılan kurucu fonksiyonun sınıf değişkenlerine atadığı değerleri veri tiplerine göre inceleyelim. Aşağıdaki kodu çalıştıralım.
#include <iostream>
#include <string>

using namespace std;

class Deneme{
    public:
        void deger(){
            cout << tamSayi << endl;
            cout << karakterDizini << endl;
            cout << karakter << endl;
            cout << bkayanSayi << endl;
            cout << kayanSayi << endl;
        }
    private:
        int tamSayi;
        string karakterDizini;
        char karakter;
        double bkayanSayi;
        float kayanSayi;
};

int main(){
    Deneme nesne; // kurucu fonksiyon çağrıldı.

    nesne.deger();
}
Ekran çıktısı olarak aşağıdaki sonucu alıyoruz:
0

╗
2.08222e-316
2.24208e-044
Varsayılan kurucu fonksiyon string tipli değişken hariç diğer değişkenlere garbage(çöp) değer atamış. String tanımlı değişkene ise boş değer atanmış ("").

Bu kez kendi kurucu fonksiyonumuzu aşağıda olduğu gibi yazalım.
#include <iostream>
#include <string>

using namespace std;

class DijitalSaat{
    public:
        DijitalSaat(string sa, string dk){
            saat = sa;
            dakika = dk;
        }
        void saatGoster(){
            cout << "Saat-> " << saat << ":" << dakika << endl;
        }
    private:
        string saat;
        string dakika;
};


int main(){
    DijitalSaat s1("00","12");
    s1.saatGoster();
}
DijitalSaat adlı sınıf tanımlandı. Kurucu ise sınıf ile aynı ada sahip bir fonksiyon. Dikkat ederseniz kurucu fonksiyonumuz herhangi bir değer döndürmüyor. Bu anlamda kurucu fonksiyonları void tipi fonksiyonlara benzetebiliriz. Kurucu parametre olarak string tipinde sa ve dk değişkenlerini almakta. main fonksiyonunda s1 adlı nesne oluşturulduğunda kurucu fonksiyon ilk değerleri atamak için 00 ve 12 string değerlerini argüman olarak almaktadır. Burada kullanıcı tanımlı kurucu fonksiyon örneğini gerçekleştirdik.

Peki kendi varsayılan kurucumuzu nasıl yazarız? Oldukça basit. Normalde kurucu fonksiyon yazmasak bile sınıf içerisinde derleyicinin bize kurucu fonksiyon verdiğini biliyoruz. Bu kurucu fonksiyon herhangi bir parametre almıyor. Aynen bu şekilde bizde parametre almayan bir kurucu fonksiyon yazıp fonksiyon içerisinde sınıf değişkenlerine varsayılan olarak istenilen değerleri atayabiliriz. Yukarıdaki örneği temek alarak varsayılan kurucu fonksiyonu yazıyorum.
DijitalSaat(){
    saat = "00";
    dakika = "00";
}
Parametresiz olarak yeni bir nesne oluşturulduğunda saatGoster fonksiyonu varsayılan olarak 00:00 değerini gösterecektir.

Hiç yorum yok:

Yorum Gönderme