nerg

O bir android değil, o bir insan.

ev | şiir | film | duyurular | ders notları | c/c++ kaynak kod | c/c++ ipuçları | çalışma soruları | yararlı linkler | özel ders | nerg ne dedi | iletişim

C/C++ İpuçları

Çözünürlük İşleci Böceği (C++)

Çözünürlük işleci olan :: atomu yerine yanlışlıkla : atomunun yazılması tehlikeli bir böcek oluşturabilir. Aşağıdaki kodu inceleyin:

class Base {
public:
   Base() {}
   virtual void func() { /* burada bir is yapiliyor. */ }
};

class Der: public Base {
public:
   Der() {}
   virtual void func()
   {
      Base:func();
      /* burada da bir iş yapılıyor  */
   }
};

int main()
{
   Der d;
   d.func();    // Özyinelemeli çağrı!

   return 0;
}

Base sınıfından türetilen Der sınıfı Base sınıfının func isimli sanal işlevini eziyor (override). Türemiş sınıfın func işlevi önce taban sınıfın func işlevini çağırmak istemiş. Ancak çözünürlük işleci yerine yanlışlıkla iki nokta üstüste atomu kullanılmış. Bu durumda artık derleyici için Base ismi geçerli bir etikettir. (label)
Artık Der sınıfının func işlevi Base sınıfının func işlevini değil kendi kendini çağırmaktadır.

o bir android değil, o bir insan