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

  • Microsoft Research

    Microsoft Re

    24 EKİM 2008
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011
  • Utah Valley Online

    Utah Valley

    9 AĞUSTOS 2010