Yapıcı ve Yıkıcı Arasındaki Fark

Yazar: Laura McKinney
Yaratılış Tarihi: 1 Nisan 2021
Güncelleme Tarihi: 10 Mayıs Ayı 2024
Anonim
18- Yapıcı ve Yıkıcı Metotlar (Visual C#)
Video: 18- Yapıcı ve Yıkıcı Metotlar (Visual C#)

İçerik


Yapıcı ve yıkıcı, sınıfları ile aynı isimde üye işlevlerdir. Eski tip inşaatçı Bir nesneyi başlatmaya yardımcı olur. Tersine, bir çöp yakma fırını kullanımsız olduğunda oluşturulan kurucuyu silen yapıcıdan farklıdır.

Bazen, bir nesnenin bir kısmını kullanmadan önce başlatmak gerekir. Örneğin, yığın üzerinde çalışıyoruz, herhangi bir işlem yapmadan önce yığının tepesi daima sıfıra ayarlanmalıdır. Bu otomatik başlatma özelliği, "Oluşturucu" ile gerçekleştirilir. Mesela, bir nesne yok edilmeden önce bazı kodları yürütmek gerekirse. Örneğin, bir nesne imha edilmeden önce, açmış olduğu bir dosyayı kapatması gerekiyorsa. 'Yıkıcı' yardımı ile gerçekleştirilebilir.

Bir karşılaştırma çizelgesi yardımı ile yapıcı ve yıkıcı arasındaki temel farklardan bazılarını gözden geçirelim.

  1. Karşılaştırma Tablosu
  2. Tanım
  3. Anahtar Farklılıklar
  4. Sonuç

Karşılaştırma Tablosu:

Karşılaştırma için temelinşaatçıçöp yakma fırını
amaç

Belleği bir nesneye ayırır.Bir nesnenin hafızasını serbest bırakır.
deklarasyon class_name (eğer varsa değişkenler) {};~ sınıf_adı (bağımsız değişken yok) {};
Argümanlar Yapıcı argümanı kabul eder Yıkıcı herhangi bir argümanı kabul etmiyor.
çağrıNesne oluşturulurken yapıcı otomatik olarak çağrılır.Bloktan çıkıldığı veya programın sona erdiği için yıkıcı otomatik olarak çağrılır.
ÇalışmaYapıcı, bir nesnenin kullanılmadan önce değerinin bir kısmını başlatmasına izin verir.Yıkıcı, bir nesnenin imha sırasında bazı kodlar çalıştırmasına izin verir.
İcra emri

Yapıcı ardışık düzende çağrılır.
Yıkıcı, kurucu sırasına göre çağrılır.
Sayılarla Bir sınıfta birden fazla kurucu olabilir.Sınıfta her zaman tek bir yıkıcı vardır.
Oluşturucu Kopyala Yapıcıyı kopyala, yapıcının bir nesneyi başka bir nesneden bildirmesini ve başlatmasını sağlar.Böyle bir kavram yok.
Aşırı yükleme Yapıcılar aşırı yüklenebilir.Yıkıcı aşırı yüklenemez.


Yapıcının Tanımı:

bir inşaatçı temelde nesneyi başlatan ve ona bellek ayıran sınıfın üye bir işlevidir. Yapıcılar, ilan edildikleri ve sınıfın adı ile aynı adda tanımlandıkları gibi kolayca tanımlanabilirler. Bir yapıcı herhangi bir geri dönüş türüne sahip değildir; bu yüzden hiçbir şey döndürmezler, “boş” bile değiller. Bir kurucu her zaman bir sınıfın ortak bölümünde tanımlanır.

Bir sınıfta birden fazla kurucu olabilir; iletilen argümanların sayısına ve türüne göre ayırt edilebilirler. Bir sınıfta birden fazla kurucu varsa; örtülü kurucu (hiçbir şey yapmaz yapıcı), bunlarla birlikte tanımlanmalıdır; hiçbir şey yapmaz ama derleyiciyi tatmin eder.

Yapıcılar ayrıca varsayılan argümanlarla da tanımlanabilir. Oysa, nesneyi “dinamik olarak” başlatıyorlar. Yapıcılar ne kalıtsal, ne de sanal olabilir, ancak aşırı yüklenebilirler. Adreslerine yönlendirilemezler.


Yapıcı Türleri

Temel olarak üç tür kurucu vardır: Varsayılan, Parametreli ve Kopya Oluşturucu.

  • Varsayılan Oluşturucu: Yapıcıya hiçbir argüman verilmeyen bir kurucu. Varsayılan yapıcının parametresi yoktur, ancak varsayılan yapıcının değerleri varsayılan olarak (dinamik olarak) geçirilebilir.
  • Parametreli Yapıcı: Bu tür kurucu argümanları alır; veri üyelerine argüman olarak farklı değerler iletebiliriz.
  • Oluşturucu Kopyala: Kopya yapıcı, diğer yapıcı türlerinden farklıdır, çünkü diğer nesnenin adresini argüman olarak kabul eder.

Yapıcı uygulaması:

sınıf Const {int a, b; public: Const () // parametresi olmayan {a = 0; yapıcı; b = 0; } Const (int c, int d) {// yapıcı olan a = c parametresi; c = d'dir; }}; int main () {Const C1; C2 (10,20); // bu ifade, yapıcıyı çağırıyor}

C1 oluşturulduğunda parametresi olmayan bir yapıcı çalıştırılır, C1 hiçbir parametreyi geçemez. Oysa C2 oluşturulduğunda, yapıcıya iki tamsayı geçerken parametresi olan bir yapıcı çalıştırılır.

Destructor'un tanımı:

bir çöp yakma fırını Aynı zamanda bir nesneye tahsis edilen hafızayı serbest bırakan bir sınıfın üye işlevidir. Önce bir sınıfın adı ile tanımlanır, dalga (~) sembolü. Yıkıcılar her zaman kurucuların tersi sırayla çağrılır.

Herhangi bir argümanı kabul etmediği için sınıfta her zaman tek bir yıkıcı vardır. Yerel cisimler, infazın kontrolü bloktan çıktığı anda imha edilir; Öte yandan, tüm program sona erdiğinde, küresel nesneler imha edilir. Bir yıkıcı, derleyici tarafından dolaylı olarak adlandırılır. Sınıflar miras alınmışsa ve bir sınıf bir üst sınıftan türetilmişse ve hem alt sınıf hem de üst sınıfın yıkıcıları vardır; daha sonra, ilk önce türetilmiş sınıfın yıkıcısı, ardından da ana sınıfın yıkıcısı olarak adlandırılır.

Yıkıcı Uygulaması:

sınıf Const {int a, b; public: Const (int c, int d) // parametreli yapıcı. {a = c; c = d'dir; cout << "a ve b'nin değeri" <<>

C1 nesnesi yaratıldığında, iki tamsayılı parametreli bir yapıcı çağrılır ve “a, b” üyesi başlatılır ve “a, b” değeri ed. Bundan sonra yıkıcı çalıştırılır ve “C1 nesnesi yok edilir”.

Yıkıcı İhtiyacı

Yapıcının oluşturulması, sonuçta nesnelere bellek tahsis ettiği için bir miktar bellek alanı tüketir. Bu tahsis edilen hafıza, diğer görevler için kaynakları serbest bırakmak amacıyla nesneleri tahrip etmeden önce tahsis edilmek zorundadır. Yıkıcılar, amaçlara yönelik olarak son derece kullanışlıdır; bu, nesneleri etkin bir şekilde yok eder ve belleği serbest bırakmak için temizleme görevleri gerçekleştirir.

  1. Bir yapıcının birincil amacı, oluşturuldukları sırada nesnelere bellek tahsis etmektir. Bir yıkıcının asıl amacı, yok edildiğinde cismin hafızasını boşaltmaktır.
  2. Bir yapıcının argümanları kabul etmesine izin verilir, çünkü argümanlar sınıfın veri üyelerini başlatmak için kullanılabilir. Öte yandan, bir yıkıcı herhangi bir argümanı kabul etmemektedir, çünkü tek işi nesnenin hafızasını serbest bırakmaktır.
  3. Bir nesne oluşturulduğunda bir yapıcı çağrılır. Buna karşılık, bir program sonlandırıldığında veya program bir nesnenin oluşturulduğu bloktan çıktığında bir yıkıcı çağrılır.
  4. Yapıcı genellikle sınıfın veri üyelerini başlatmak için kullanılır, oysa nesnenin imha edilmeden önce bir eylem gerçekleştirmesine izin vermek için bir yıkıcı kullanılır.
  5. Yapıcılar art arda sırayla yürütülür, yani temel sınıfı miras alan türetilmiş bir sınıf varsa ve türetilmiş sınıfın nesnesi oluşturulursa önce temel sınıfın yapıcısını, sonra da türetilmiş sınıfın yapıcısını çağıracaktır. Tersine, türetilmiş sınıfın yıkıcısı ilk olarak adlandırılır ve daha sonra temel sınıf bir yıkıcının kurucuya ters sırada uygulandığı anlamına gelir.
  6. Sınıfta, geçen sayı argümanları ile tanımlanmış birden fazla kurucu olabilir, oysa sadece bir yıkıcıya sahip olabilir.
  7. Yıkıcı böyle bir konsepte sahip değilken bir nesnenin başka bir nesneden başlatılmasını sağlayan bir kopya kurucu kavramı vardır.
  8. Yapıcılar, aynı yapıcı adı altında farklı eylemler gerçekleştirmek için aşırı yüklenebilir. Aksine, yıkıcılar aşırı yüklenemez.

Sonuç:

Benzerliğin yanı sıra, bu kurucu ve yıkıcı, bir sınıfın özel üye işlevidir ve aynı isme sahiptir, her ikisi arasındaki temel fark, hafıza tahsisi sırasında 'kurucu' olarak adlandırılır ve 'yıkıcı' olarak adlandırılır. Nesnelerin hafızasının boşaltılması Hem yapıcı hem de yıkıcı, sınıfta tanımlanmamış olsalar bile derleyici tarafından dolaylı olarak adlandırılır.