Sanal işleve sahip bir temel sınıfım var ve bu işlevi türetilmiş bir sınıfta geçersiz kılmak istiyorum. Derleyicinin türetilmiş sınıfta tanımladığım işlevin temel sınıftaki bir işlevi gerçekten geçersiz kılıp kılmadığını kontrol etmesini sağlamanın bir yolu var mı? Eskisini geçersiz kılmak yerine yanlışlıkla yeni bir işlevi ilan etmemeyi sağlayan bazı makro veya başka bir şey eklemek istiyorum.
Bu örneği ele alalım:
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);
}
Çocuğun yöntemi bildirimi kaçırdığı ve bu nedenle yeni bir yöntem bildirdiği için parent::handle_event()
bunun yerine burada çağrılır . Bu, işlev adında bir yazım hatası veya parametre türlerinde bazı küçük farklar olabilir. Temel sınıfın arabirimi değişirse ve bir yerde bazı türetilmiş sınıflar değişikliği yansıtacak şekilde güncellenmezse de kolayca gerçekleşebilir.child::handle_event()
const
Bu sorunu önlemenin bir yolu var mı, derleyiciye veya başka bir araca bunu benim için kontrol etmesini bir şekilde söyleyebilir miyim? Herhangi bir yararlı derleyici bayrağı (tercihen g ++ için)? Bu problemlerden nasıl kaçınıyorsunuz?