Ctor ve Dtor Temelleri
Coddy'nin C++ Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 10 / 104.
Bir yapıcı (constructor), bir nesne oluşturulduğunda otomatik olarak çalışan özel bir metottur. Bir yıkıcı (destructor), nesne yok edildiğinde çalışır.
Varsayılan yapıcı
class Book {
private:
std::string title;
int pages;
public:
Book() {
this->title = "Unknown";
this->pages = 0;
}
};Parametreli kurucu
Book(std::string title, int pages) {
this->title = title;
this->pages = pages;
}Constructor overloading — birden fazla yapıcı metot
class Book {
private:
std::string title;
int pages;
public:
Book() {
this->title = "Unknown";
this->pages = 0;
}
Book(std::string title) {
this->title = title;
this->pages = 0;
}
Book(std::string title, int pages) {
this->title = title;
this->pages = pages;
}
};Yıkıcı (Destructor) — nesne yok edildiğinde çalışır
class Book {
public:
~Book() {
std::cout << "Book destroyed" << std::endl;
}
};Farklı kurucularla nesne oluşturma
Book book1; // Varsayılan kurucu
Book book2("Harry Potter"); // Bir parametre
Book book3("1984", 328); // İki parametreYapıcılar (Constructors), sınıf ile aynı ada sahiptir ve herhangi bir dönüş türüne sahip değildirler. Yıkıcılar (Destructors) ~ClassName() kullanır ve nesnelerin kapsamı sona erdiğinde, oluşturulma sırasının tersine otomatik olarak çağrılırlar.
Görev
OrtaÜç aşırı yüklenmiş yapıcı ve bir yıkıcı içeren bir Product sınıfı oluşturun:
- 3 parametreli yapıcı: name, price, stock
- 2 parametreli yapıcı: name, price (stock = 0)
- Varsayılan yapıcı: name = "Unknown", price = 0, stock = 0
- Yıkıcı:
"Destroying: <name>"yazdırır
Kopya kağıdı
Bir constructor (yapıcı metot), bir nesne oluşturulduğunda otomatik olarak çalışan özel bir metottur. Bir destructor (yıkıcı metot) ise nesne yok edildiğinde çalışır.
Default constructor (Varsayılan yapıcı) — varsayılan değerlerle başlatır:
class Book {
private:
std::string title;
int pages;
public:
Book() {
this->title = "Unknown";
this->pages = 0;
}
};Parameterized constructor (Parametreli yapıcı) — parametreleri kabul eder:
Book(std::string title, int pages) {
this->title = title;
this->pages = pages;
}Constructor overloading (Yapıcı aşırı yüklemesi) — farklı parametrelere sahip birden fazla yapıcı:
class Book {
private:
std::string title;
int pages;
public:
Book() {
this->title = "Unknown";
this->pages = 0;
}
Book(std::string title) {
this->title = title;
this->pages = 0;
}
Book(std::string title, int pages) {
this->title = title;
this->pages = pages;
}
};Destructor (Yıkıcı) — nesne yok edildiğinde çalışır, ~ClassName() kullanır:
class Book {
public:
~Book() {
std::cout << "Book destroyed" << std::endl;
}
};Farklı yapıcılar ile nesne oluşturma:
Book book1; // Default constructor
Book book2("Harry Potter"); // One parameter
Book book3("1984", 328); // Two parametersYapıcılar, sınıf ile aynı ada sahiptir ve dönüş türleri yoktur. Yıkıcılar, nesneler kapsam dışına çıktığında oluşturulma sırasının tersine otomatik olarak çağrılır.
Kendin dene
#include <iostream>
#include "Product.h"
int main() {
std::string name;
int price, stock;
std::getline(std::cin, name);
std::cin >> price >> stock;
Product product1(name, price, stock);
Product product2("Keyboard", 79);
Product product3;
std::cout << "Product 1: " << product1.getName() << " - $" << product1.getPrice() << " (Stock: " << product1.getStock() << ")" << std::endl;
std::cout << "Product 2: " << product2.getName() << " - $" << product2.getPrice() << " (Stock: " << product2.getStock() << ")" << std::endl;
std::cout << "Product 3: " << product3.getName() << " - $" << product3.getPrice() << " (Stock: " << product3.getStock() << ")" << std::endl;
return 0;
}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
1OOP Temelleri
Harici DosyalarC++ Build ve DerlemeBaşlık Dosyaları ve Kaynak DosyalarıAd Alanları ve KapsamC++'ta OOP'ye GirişSınıflar ve Nesneler'this' İşaretçisiMetotlar (Üye Fonksiyonlar)Öznitelikler (Veri Üyeleri)Ctor ve Dtor TemelleriÖzet - Basit Hesap Makinesi4Sınıf Özellikleri
Örnek ve Statik ÜyelerGetter ve Setter MetotlarıConst Üye FonksiyonlarMutable Anahtar KelimesiStatik Metotlar ve DeğişkenlerFriend Fonksiyonlar ve SınıflarÖzet - Banka Hesabı Yöneticisi7Kalıtım
Temel KalıtımKalıtım Erişim SeviyeleriCtor ve Dtor Çağrılma SırasıMetot Geçersiz KılmaSanal Fonksiyonlar ve VTableÇoklu KalıtımSanal KalıtımÖzet - Çalışan Hiyerarşisi10STL Genel Bakış
STL Genel Bakış ve FelsefesiSTL KonteynerleriİteratörlerSTL AlgoritmalarıFunctor'lar ve Lambda İfadeleriÖzet - Kelime Frekansı13Tasarım Kalıpları 1. Bölüm
Tasarım Kalıplarına GirişSingleton KalıbıFactory ve Abstract FactoryBuilder KalıbıObserver KalıbıStrategy Kalıbı2Bellek Yönetimi
Stack ve Heap Bellekİşaretçiler ve ReferanslarDinamik Bellek (new/delete)C++'ta Akıllı İşaretçilerC++'ta RAIIÖzet - Dinamik Dizi Yöneticisi5Kapsülleme
C++'da Erişim BelirleyicilerDerinlemesine Erişim BelirleyicilerBilgi GizlemeStruct vs Classİç İçe ve Dahili SınıflarÖzet - Öğrenci Kayıt Sistemi8Çok Biçimlilik
Derleme ve Çalışma Zamanı Çok BiçimliliğiFonksiyon Aşırı YüklemeSanal Fonksiyonlara Yeniden BakışSaf Sanal FonksiyonlarSoyut SınıflarC++'ta Arayüz TasarımıDynamic Casting ve RTTIÖzet - Şekil Hesaplayıcı3Yapıcılar ve Yıkıcılar
Varsayılan YapıcıParametreli YapıcıKopya YapıcıTaşıma YapıcısıYapıcı İlklendirme ListeleriTemsilci YapıcılarYıkıcılara Derinlemesine BakışÜç / Beş / Sıfır KuralıÖzet - String Sınıfı6Operatör Aşırı Yükleme
Operatör Aşırı Yüklemeye GirişAritmetik Operatör Aşırı YüklemeKarşılaştırma Operatörü Aşırı YüklemeStream OperatörleriAtama Operatörü Aşırı Yükleme[] ve () Operatör Aşırı YüklemeTip Dönüşüm OperatörleriÖzet - Matris Sınıfı9Şablonlar
Fonksiyon ŞablonlarıSınıf ŞablonlarıŞablon ÖzelleştirmeVariadic ŞablonlarSFINAE ve Type Traits TemelleriÖzet - Generic Konteyner