Ana içeriğe geç
Modül 4 · Ders 2 ders 2Kurstaki 10/18~12 min
Modül dersleri (2/2)

Yapıcılar ve Yıkıcılar

Yapıcılar ve yıkıcılar, nesnelerin yaşam döngüsünü yöneten özel üye işlevlerdir: yaratılmaları (başlatma) ve yok edilmeleri (kaynak temizleme).

İnşaatçılar

Bellekte sınıfın bir nesnesi oluşturulduğunda otomatik olarak bir yapıcı çağrılır.

  • Sınıfla aynı ada sahiptir.
  • dönüş tipi yoktur (void bile değildir).
  • Farklı parametre setlerini kabul edecek şekilde aşırı yüklenebilir.
C++
#include <iostream>
#include <string>

class Item {
private:
    std::string name;
    double price;

public:
    // Parameterized constructor
    Item(std::string itemName, double itemPrice) {
        name = itemName;
        price = itemPrice;
        std::cout << "Object " << name << " created." << std::endl;
    }

    void display() {
        std::cout << name << ": " << price << " EUR" << std::endl;
    }
};

int main() {
    // Implicit call to the constructor passing parameters
    Item book("Libro C++", 29.99);
    book.display();
    return 0;
}

Varsayılan Oluşturucu

Herhangi bir kurucu tanımlamazsanız, C++ derleyicisi parametreleri olmayan varsayılan bir kurucu oluşturur. Ancak, parametrelerle özel bir kurucu yazarsanız, derleyici artık varsayılanı otomatik olarak oluşturmaz; dolayısıyla gerekirse onu açıkça tanımlamanız gerekir:

C++
class Point {
public:
    int x;
    int y;

    // Explicit default constructor
    Point() {
        x = 0;
        y = 0;
    }
};

Yıkıcılar

Nesne kapsam dışına çıktığında veya açıkça bellekten kaldırıldığında bir yıkıcı otomatik olarak çağrılır.

  • öncesine tilde ~ (ör. ~Item()) gelen sınıfla aynı ada sahiptir.
  • Parametre kabul etmez ve dönüş tipi yoktur.
  • Kaynakları serbest bırakmak için kullanılır (örn. dosyaları kapatmak, dinamik olarak ayrılmış belleği boşaltmak).
C++
class ResourceManager {
public:
    ~ResourceManager() {
        // Cleanup code
        std::cout << "Resources released." << std::endl;
    }
};

Kendin dene

Egzersiz#cpp.m4.l2.e1
Denemeler: 0Yükleniyor…

Özel üye std::string kullanıcı adına sahip User adında bir sınıf tanımlayın. Bir dizeyi (User(std::string name)) kabul eden ve bunu kullanıcı adını başlatmak için kullanan bir genel kurucu ekleyin. Kullanıcı adını döndüren bir genel alıcı std::string getUsername() ekleyin. Ana olarak, ad olarak 'Alice'i geçen bir Kullanıcı nesnesi oluşturun ve std::cout kullanarak kullanıcı adını yazdırın.

Düzenleyici yükleniyor…
İpucu göster

Yapıcı sınıfla aynı ada sahiptir ve herhangi bir dönüş türü belirtmez, hatta "void" bile belirtmez.

3 denemeden sonra çözüm mevcut

Egzersiz#cpp.m4.l2.e2
Denemeler: 0Yükleniyor…

İki ortak tamsayı üyesi olan Point adında bir sınıf tanımlayın: x ve y. X ve y'yi 0 olarak başlatan bir varsayılan kurucu ekleyin (parametre yok). Ana olarak, varsayılan kurucuyu kullanarak bir Point nesnesi oluşturun ve x ile y'yi yazdırın.

Düzenleyici yükleniyor…
İpucu göster

Varsayılan kurucu hiçbir argüman almaz: `Point() { x = 0; y = 0; }`.

3 denemeden sonra çözüm mevcut