Constructor bir metottur. Bu metot bir class içerisinde bulunur ve class ile aynı ismi alır. Herhangi bir veri tipi yoktur, objedir.
Neden Kullanılır?
Class'ı ele alalım. Bir class içerisinde birden fazla veri barındırabiliyor. Bazı durumlarda bu verilere otomatik olarak bir başlangıç ataması yapmamız gerekebilir. Öyle ki bir koordinat classı oluşturulurken başlangıç değeri 0,0 belirlenebilir. Veya yeni bir classı main içerisinde tanımlarken doğrudan bazı verilere bilgi gönderilebilir. Yani;
class kisi{
public:
int numara;
string ad;
string soyad;
double dersNotu;
kisi() {
numara = 0;
ad = "";
soyad = "";
dersNotu = 0;
}
};
int main(){
kisi mert;
cout << "NUMARA: " << mert.numara << "\n";
cout << "AD: " << mert.ad << "\n";
cout << "SOYAD: " << mert.soyad << "\n";
cout << "DERS NOTU: " << mert.dersNotu << "\n";
}
Kod blogumuzu incelediğimizde kisi() adındaki constructor'ın nasıl açıldığını ve nasıl veri aktarımı yapıldığını görmüş olduk. Main içerisinde mert adındaki obje herhangi bir parametreye sahip olmadığı için altta yer alan çıktılarımız şöyle olacaktır:
NUMARA: 0
AD:
SOYAD:
DERS NOTU: 0
Ama varsayalım ki biz bir constructor oluşturmadan doğrudan main alanını bu hali ile çalıştırsaydık:
NUMARA: 0
AD:
SOYAD:
DERS NOTU: 1.5211e-4127
gibi anlamsız ifadeleri (bellekten herhangi bir bölgeyi) çekmiş olurduk.
Bu sebeple constructor oluşturmak çok önemlidir.
ÖRNEK
Bir dikdörtgen sınıfı oluşturun ve alanı ile çevresini hesaplayan metotlar yazın. (Constructor oluşturun.)
ÇÖZÜM
class Dikdortgen {
public:
double x;
double y;
Dikdortgen(){
x = 0;
y = 0;
}
Dikdortgen(double a) {
x = a;
y = a;
}
Dikdortgen(double a, double b) {
x = a;
y = b;
}
double alan(){
return x*y;
}
double cevre(){
return (x*2)+(y*2);
}
};
int main(){
Dikdortgen M;
cout << "Alan: " << M.alan() << "\nCevre: " << M.cevre() << "\n\n";
Dikdortgen S(10);
cout << "Alan: " << S.alan() << "\nCevre: " << S.cevre() << "\n\n";
Dikdortgen T(10,5);
cout << "Alan: " << T.alan() << "\nCevre: " << T.cevre() << "\n\n";
}
ÇIKTI
Görüldüğü üzere 2. Constructor (tek değer alan) eğer tek bir değer gelirse kare gibi kabul edilmesi için hazırlanmıştır.