SORU
30 Ocak 2009, Cuma


Güvenli kılma C sanal fonksiyonlar

Sanal fonksiyon temel bir sınıf ve türetilmiş bir sınıf içinde bu işlevi geçersiz kılmak istiyorum. Bir şekilde türetilmiş sınıf olarak ilan ettim işlevi aslında temel sınıf işlevi geçersiz kılar derleyici kontrol edin. Bazı makro veya yanlışlıkla yeni bir işlev, eskisini geçersiz kılma yerine beyan etmedim sağlayan bir şey eklemek istiyorum.

Bu örnek alın:

class parent {
public:
  virtual void handle_event(int something) const {
    // boring default code
  }
};

class child : public parent {
public:
  virtual void handle_event(int something) {
    // new exciting code
  }
};

int main() {
  parent *p = new child();
  p->handle_event(1);
}

Burada parent::handle_event() çocuğun yöntemi const bildirimi özlüyor çünkü ** 4, yerine denir ve bu nedenle yeni bir yöntem bildirir. Bu işlev adı da bir yazım hatası veya parametrelerin türleri bazı küçük farklar olabilir. Ayrıca kolayca eğer temel sınıf arayüzü değişirse olabilir ve bir yerlerde bazı türetilmiş sınıf değişikliği yansıtmak için güncellendi değildi.

Bu sorunu önlemek için, ben bir şekilde derleyici söyle var olabilir ya da başka bir araç benim için bu onay için? Herhangi bir yararlı derleyici bayrakları (tercihen g )? Nasıl bu sorunları önlemek musunuz?

CEVAP
23 Temmuz 2012, PAZARTESİ


G 4.7 beri 11 override yeni bir C anahtar kelimeyi anlamak:

class child : public parent {
    public:
      // force handle_event to override a existing function in parent
      // error out if the function with the correct signature does not exist
      virtual void handle_event(int something) override;
};

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • eyes4beautee

    eyes4beautee

    17 HAZİRAN 2011
  • fireflame65

    fireflame65

    27 Mart 2007
  • Modus Recordings

    Modus Record

    26 Kasım 2008