Безопасно переопределить виртуальные функции C ++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Безопасно переопределить виртуальные функции C ++

Сообщение Anonymous »

У меня есть базовый класс с виртуальной функцией, и я хочу переопределить эту функцию в производном классе. Есть ли какой -нибудь способ проверить компилятор, фактически переопределяет функцию, которую я объявил в полученном классе, в базовом классе? Я хотел бы добавить немного макроса или что -то, что гарантирует, что я случайно не объявил о новой функции, вместо того, чтобы переопределить старую.

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»