Menu
Coddy logo textTech

Varsayılan Yapıcı

Coddy'nin C++ Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 18 / 104.

Varsayılan kurucu, hiçbir bağımsız değişken olmadan çağrılabilen bir kurucudur. Başlangıç değerleri sağlanmadığında bir nesneyi başlatır. Her sınıfın, nesneleri geçerli bir varsayılan durumda oluşturmanın bir yoluna ihtiyacı vardır.

Herhangi bir kurucu tanımlamazsanız derleyici, ilkel türler için hiçbir şey yapmayan ve üye nesneler için varsayılan kurucuları çağıran örtük bir varsayılan kurucu oluşturur.

class Player {
    int health;
    int score;
public:
    Player() {           // Varsayılan yapıcı
        health = 100;
        score = 0;
    }
};

Player p1;               // Varsayılan yapıcıyı çağırır
Player p2{};             // Ayrıca varsayılan yapıcıyı çağırır

Herhangi bir kurucu (parametreli olan gibi) tanımladığınızda derleyici artık varsayılan bir kurucu oluşturmaz. Hâlâ ihtiyacınız varsa bir kurucuyu açıkça tanımlamanız gerekir.

class Enemy {
    int damage;
public:
    Enemy(int d) : damage(d) {}  // Sadece parametreli kurucu
};

Enemy e1(10);    // Çalışır
Enemy e2;        // Hata! Varsayılan kurucu yok

Modern C++'da, = default kullanarak derleyici tarafından oluşturulan varsayılan yapıcıyı açıkça talep edebilirsiniz:

class Item {
    int id;
public:
    Item() = default;           // Derleyici varsayılan yapıcıyı oluşturur
    Item(int i) : id(i) {}
};

Varsayılan kurucular, nesne dizileri oluşturmak ve argümanlar olmadan öğeler oluşturması gerekebilen std::vector gibi kapsayıcılarda kullanılan sınıflar için gereklidir.

challenge icon

Görev

Kolay

Varsayılan kurucuların nesneleri geçerli bir başlangıç durumuna nasıl başlattığını gösteren basit bir sayaç sistemi oluşturalım.

Kodunuzu düzenlemek için iki dosya oluşturacaksınız:

  • Counter.h: Bir sayı değerini takip eden Counter sınıfını tanımlayın. Sınıfınız şunlara sahip olmalıdır:
    • Özel bir count özniteliği (tamsayı)
    • Sayacı tanımlamak için özel bir name özniteliği (dize)
    • count değerini 0'a ve name değerini "Unnamed"'e başlatan, ardından "Counter created: <name>" yazdıran bir varsayılan kurucu
    • Sayacı 1 artıran bir increment() yöntemi
    • Geçerli sayacı döndüren bir getCount() yöntemi
    • Sayaç adını döndüren bir getName() yöntemi
  • main.cpp: Nesneler farklı şekillerde oluşturulduğunda varsayılan kurucuların çalıştığını gösterin. Sayaç değerinin kaç kez artırılacağını belirten bir sayıyı girdiden okuyun, ardından:
    • Doğrudan başlatma kullanarak bir Counter oluşturun: Counter c1;
    • Süslü parantezle başlatma kullanarak başka bir Counter oluşturun: Counter c2{};
    • Girdide belirtilen sayı kadar c1 değerini artırın
    • c1 için "<name>: <count>" yazdırın
    • c2 için "<name>: <count>" yazdırın

Varsayılan kurucunuz sayesinde her iki sayaç da 0'dan başlamalıdır, ancak yalnızca c1 artırılacaktır. Bu, varsayılan kurucuların her nesnenin nasıl oluşturulduğundan bağımsız olarak öngörülebilir ve geçerli bir durumda başlamasını nasıl sağladığını gösterir.

Başlık dosyanızı main.cpp içine #include "Counter.h" kullanarak ekleyin.

Kendin dene

#include <iostream>
#include "Counter.h"

using namespace std;

int main() {
    // Artırma sayısını oku
    int n;
    cin >> n;

    // TODO: Doğrudan ilklendirme (direct initialization) kullanarak bir Counter oluştur: Counter c1;

    // TODO: Süslü parantez ilklendirmesi (brace initialization) kullanarak başka bir Counter oluştur: Counter c2{};

    // TODO: c1 nesnesini n tarafından belirtilen sayı kadar artır

    // TODO: c1 için "<name>: <count>" yazdır

    // TODO: c2 için "<name>: <count>" yazdır

    return 0;
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online C++ derleyicisi