CodeBlanks Logo Icon CodeBlanks

Parametreli yapıcı

Parametre alan yapıcılarla nesneyi başlatmayı öğrenirsin.

Parametreli yapıcı

Bir yapıcı metot parametre de alabilir. Böylece nesneyi oluştururken başlangıç değerini dışarıdan verebilirsin. Parametreli yapıcı, sınıf adından sonra parantez içinde parametre listesiyle yazılır.

Örnek: class Score { public: Score(int s) { points = s; } int points; };. Kullanımı: Score score(100);. Bu satır hem nesneyi oluşturur hem de points üyesini 100 yapar. Parametreli yapıcı tanımlandığında varsayılan yapıcı artık otomatik üretilmez; gerekirse senin yazman gerekir.

Doğrudan başlatma

Parametreli yapıcıyla nesne oluşturmanın iki yazımı vardır. Klasik yol parantezle: Score score(100);. Modern C++'ta ayraç (brace) ile de yazılabilir: Score score{100};. İkisi de aynı yapıcıyı çağırır.

Ayraçlı yazımın avantajı, daraltma dönüşümlerine (narrowing conversion) izin vermemesidir. Score score{3.5}; eğer Score(int) tanımlıysa derleme hatası verir; çünkü 3.5 double'dan int'e daralır. Parantezli yazımda ise bu sessizce dönüşür ve veri kaybı oluşur. Bu yüzden modern C++ ayraçlı yazımı önerir.

Uygulama Score sınıfına parametreli yapıcı ekle

Score sınıfını tanımla. public: altına Score(int s) { points = s; } yapıcı metodunu ve int points; üye değişkenini ekle. main içinde Score score(100); ile bir örnek oluştur ve std::cout ile points'i yazdır.

Başlangıç kodu

main.cpp
#include <iostream>

// Score sınıfını tanımla

int main() {
    // Score örneğini parametreli yapıcıyla oluştur ve points yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>

class Score {
public:
    Score(int s) {
        points = s;
    }
    int points;
};

int main() {
    Score score(100);
    std::cout << score.points;
    return 0;
}

Beklenen çıktı

100

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Parametreli yapıcı çağrısını tamamla

Soru
Score score____;
Cevap
Score score(100);

Açıklama: Score score(100); ile değer parametre olarak verilir.

2 Score sınıfında yalnızca Score(int) tanımlıysa Score s; ne olur?

main.cpp
class Score { public: Score(int s); };
  • Çalışır, varsayılan yapıcı çağrılır
  • Çalışır, s sıfırlanır
  • Derleme hatası verir Doğru cevap
  • Çalışır, s çöp değer alır

Açıklama: Parametreli yapıcı varsa varsayılan yapıcı otomatik üretilmez.

3 Çağrıyı sonucuna eşle

Kavram Anlamı
Score s(100); 100, parantezle
Score s{100}; 100, ayraçla
Score s{3.5}; derleme hatası
Score s; varsayılan yapıcı

Orta seviye bölümündeki tüm dersler