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

  • Canal de arkyoru

    Canal de ark

    18 Ocak 2007
  • Semantic Mastery

    Semantic Mas

    30 EKİM 2013
  • Xbox

    Xbox

    1 Kasım 2005