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 (
voidbile değildir). - Farklı parametre setlerini kabul edecek şekilde aşırı yüklenebilir.
#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:
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).
class ResourceManager {
public:
~ResourceManager() {
// Cleanup code
std::cout << "Resources released." << std::endl;
}
};Kendin dene
Ö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.
İ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
İ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.
İpucu göster
Varsayılan kurucu hiçbir argüman almaz: `Point() { x = 0; y = 0; }`.
3 denemeden sonra çözüm mevcut