У меня есть базовый класс с виртуальной функцией, и я хочу переопределить эту функцию в производном классе. Есть ли какой -нибудь способ проверить компилятор, фактически переопределяет функцию, которую я объявил в полученном классе, в базовом классе? Я хотел бы добавить немного макроса или что -то, что гарантирует, что я случайно не объявил о новой функции, вместо того, чтобы переопределить старую.
Код: Выделить всё
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);
}
здесь Parent :: harder_event () называется вместо ребенка :: harder_event () , потому что метод ребенка пропускает объявление Const и, следовательно, объявляет новый метод. Это также может быть опечатка в имени функции или некоторой незначительной разницей в типах параметров. Это также может легко произойти, если интерфейс базового класса изменится, и где -то, какой -то производный класс не был обновлен, чтобы отразить изменение. Есть ли полезные флаги компилятора (предпочтительно для G ++)? Как вы избегаете этих проблем?
Подробнее здесь:
https://stackoverflow.com/questions/497 ... -functions