SORU
2 AĞUSTOS 2009, Pazar


Neden C saf sanal yıkıcı ihtiyacımız var mı ?

Sanal bir yıkıcı ihtiyacını anlıyorum. Ama neden saf sanal yıkıcı ihtiyacımız var mı? C makalelerden birinde yazar, bir sınıf soyut yapmak istediğimizde saf sanal yıkıcı kullandığımız dile getirdi.

Ama bir sınıf soyut saf olarak üye işlevleri sanal hale getirerek yapabiliriz.

Benim soru vardır

  1. Ne zaman gerçekten bir saf sanal yıkıcı bir hale getirebiliriz? Herkes iyi gerçek zamanlı bir örnek verebilir misiniz?

  2. Oluştururken, soyut sınıflar yıkıcı da saf sanal yapmak için iyi bir uygulamadır? ..Sonra mı? Evet

CEVAP
2 AĞUSTOS 2009, Pazar


  1. Muhtemelen gerçek nedeni bu saf sanal yıkıcı izin verilir olduğu için onları yasaklamak anlamına ekleyerek başka bir kuralın Dil ve hiç gerek yok bu kural beri hiçbir kötü etkileri gelebilir sağlayan bir saf sanal yıkıcı.

  2. Hayır, basit bir sanal yeterlidir.

Sanal yöntemleri için varsayılan uygulamaları ile bir nesne oluşturur ve bu soyut kimse herhangi bir geçersiz kılmak için zorlamadan yapmak istiyorumözelyöntem, saf sanal yıkıcı yapabilirsiniz. Pek anlamı yok ama olabilir.

Derleyici eğer sınıfın yazar bunu yaparsa değil türetilmiş sınıflar için örtülü bir yıkıcı oluşturur beri, herhangi bir türetilmiş sınıfları unutmayındeğilsoyut olması. Bu nedenle, temel sınıf saf sanal yıkıcı olması türetilmiş sınıfları için herhangi bir fark yapmaz. Sadece temel sınıf soyut (@kappa's yorum için teşekkürler. yapacak

Ayrıca her doğan sınıf muhtemelen özel-temiz kod olması gerekiyor varsayalım ve bir yazmak için bir hatırlatma olarak saf sanal yıkıcı bir olabilir ama bu yapmacık (ve zorlanmayan) gibi görünüyor.

Not:Yıkıcı bile tek yöntemdirsaf sanalvardırtüretilmiş sınıfları (Evet saf sanal fonksiyonlar uygulamalara sahip olabilir) instatiate için bir uygulama var.

struct foo {
    virtual void bar() = 0;
};

void foo::bar() { /* default implementation */ }

class foof : public foo {
    void bar() { foo::bar(); } // have to explicitly call default implementation.
};

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BASS212M

    BASS212M

    15 Temmuz 2009
  • foreignimage

    foreignimage

    13 HAZİRAN 2006
  • snookie77

    snookie77

    2 Mart 2006