C++ programlama dilinde “constructor” veya “yapıcı metotlar” (constructor methods) sınıfların nesnelerinin oluşturulması sırasında otomatik olarak çağrılan özel fonksiyonlardır. Yapıcı metotlar, sınıfın bir örneği (nesnesi) oluşturulduğunda çağrılır ve genellikle bu nesnenin başlangıç durumunu ayarlamak için kullanılır.
Yapıcı metotlar şu özelliklere sahiptir:
- İsimleri sınıf ile aynıdır: Yapıcı metotların ismi sınıfın adı ile aynı olmalıdır.
- Dönüş tipi yoktur: Yapıcı metotların bir dönüş tipi yoktur. Başka bir deyişle,
void
veya herhangi bir başka tür belirtilmez. - Parametreler alabilir: Yapıcı metotlar parametre alabilir, bu sayede nesne oluşturulurken başlangıç değerleri atanabilir.
Örnek bir sınıf ve yapıcı metot kullanımı şu şekildedir:
#include <iostream> using namespace std; class Araba { public: // Yapıcı metot Araba(string marka, string model, int yil) { this->marka = marka; this->model = model; this->uretimYili = yil; cout << "Araba nesnesi oluşturuldu." << endl; } void bilgileriGoster() { cout << "Marka: " << marka << endl; cout << "Model: " << model << endl; cout << "Üretim Yılı: " << uretimYili << endl; } private: string marka; string model; int uretimYili; }; int main() { // Araba sınıfından bir nesne oluşturulduğunda yapıcı metot çağrılır. Araba araba1("Toyota", "Corolla", 2022); // Nesnenin bilgilerini ekrana yazdırma araba1.bilgileriGoster(); return 0; }
Bu örnekte, Araba
sınıfının yapıcı metodu, Araba
nesnesi oluşturulduğunda çağrılır ve nesnenin özelliklerini başlatır. Bu özelliklere daha sonra bilgileriGoster
fonksiyonu aracılığıyla erişilebilir.
Başka bir örnek üzerinden devam edelim. Aşağıda, bir sınıfın yapıcı metodu olmadan nasıl çalıştığını gösteren bir örnek bulunmaktadır:
#include <iostream> #include <string> using namespace std; class Ogrenci { public: // Yapıcı metod olmadan // Diğer sınıf fonksiyonları void bilgileriGoster() { cout << "Ogrenci Bilgileri: " << endl; cout << "Ad: " << ad << endl; cout << "Soyad: " << soyad << endl; cout << "Numara: " << numara << endl; } private: string ad; string soyad; int numara; }; int main() { // Ogrenci sınıfından bir nesne oluşturuldu. Ogrenci ogrenci1; // Nesnenin bilgilerini ekrana yazdırma ogrenci1.bilgileriGoster(); return 0; }
Bu örnekte, Ogrenci
sınıfının bir yapıcı metodu yok. main
fonksiyonunda Ogrenci
sınıfından bir nesne oluşturulduğunda, sınıfın üye değişkenleri (ad, soyad, numara) varsayılan değerlerle başlatılır. Ancak, bu değerler genellikle istenmeyen değerlerdir (boş string ve 0 sayı değeri gibi).
Bu nedenle, sınıfınızın daha belirgin ve kontrol edilebilir bir başlangıç durumu olması için bir yapıcı metot kullanmak genellikle tercih edilen bir yaklaşımdır. Yapıcı metodun kullanılması, nesnelerin başlangıç durumlarını belirlemek ve sınıfın doğru şekilde kullanılmasını sağlamak açısından daha iyi bir programlama pratiğidir.
#include <iostream> #include <string> using namespace std; class Kitap { public: // Yapıcı metot Kitap(string ad, string yazar, int sayfaSayisi) { this->ad = ad; this->yazar = yazar; this->sayfaSayisi = sayfaSayisi; cout << "Kitap nesnesi oluşturuldu." << endl; } // Bilgileri gösteren fonksiyon void bilgileriGoster() { cout << "Kitap Adı: " << ad << endl; cout << "Yazar: " << yazar << endl; cout << "Sayfa Sayısı: " << sayfaSayisi << endl; } private: string ad; string yazar; int sayfaSayisi; }; int main() { // Kitap sınıfından bir nesne oluşturulduğunda yapıcı metot çağrılır. Kitap kitap1("1984", "George Orwell", 328); // Nesnenin bilgilerini ekrana yazdırma kitap1.bilgileriGoster(); return 0; }
Bu örnekte, Kitap
sınıfının yapıcı metodu, Kitap
nesnesi oluşturulduğunda çağrılır ve nesnenin özelliklerini başlatır. Ardından, bilgileriGoster
fonksiyonu ile nesnenin özelliklerini ekrana yazdırabiliriz. Bu sayede, sınıfın yapıcı metodu nesnenin oluşturulması sırasında otomatik olarak çağrılarak başlangıç değerleri atanmış olur.
Constructor (yapıcı metotlar) kullanmak, C++ programlama dilinde zorunlu değildir. Ancak, bir sınıfın yapıcı metodu olmaması durumunda, nesnelerin başlangıç durumları belirsiz olabilir. Yapıcı metodun eksik olması durumunda, nesne oluşturulduğunda üye değişkenlerine atanacak varsayılan değerler olmayabilir.
Eğer bir sınıfın özel bir başlangıç durumu veya varsayılan değerleri varsa, bu durumda bir yapıcı metodun kullanılması genellikle faydalıdır. Bu, nesnenin oluşturulma anında belirli bir duruma getirilmesini sağlar.
Ancak, eğer siz bir sınıf oluştururken özel bir başlangıç durumuna ihtiyaç duymuyorsanız veya sınıfınızın üye değişkenlerine varsayılan değerler atanabiliyorsa, o zaman özel bir yapıcı metot kullanmamanız da mümkündür. Yapıcı metodun olmaması durumunda, C++ dilinde varsayılan bir yapıcı metot otomatik olarak oluşturulur.
class Ornek { public: // Varsayılan yapıcı metod Ornek() { // Bu yapıcı metod otomatik olarak çağrılır. } // Diğer sınıf fonksiyonları... };
Yukarıdaki örnekte, Ornek
sınıfının bir yapıcı metodu var, ancak bu yapıcı metot boş. Eğer siz bir yapıcı metot tanımlamazsanız, C++ dilinde varsayılan bir yapıcı metot otomatik olarak oluşturulur.