Разница между переопределением и переопределением функции
Предположим, что у меня есть класс A
с виртуальной функцией F()
:
class A
{
virtual void F()
{
// Do something
};
};
И у меня есть еще один класс B
, который наследует A
и переопределяет F()
:
class B : A
{
void F()
{
// Do something
};
};
И другой класс C
, который также наследует A
, но переопределяет F()
:
class C : A
{
void F() override
{
// Do something
};
};
В чем разница между F()
в классах B
и C
?
Ответы
Ответ 1
Оба B::f()
и C::f()
являются переопределениями, и они точно совпадают.
override
- это, по сути, консультативный термин времени компиляции, который вызовет ошибку компиляции, если функция не переопределяет ее в базовом классе.
Это может помочь стабильности программы: если имя и типы параметров в A::f()
будут изменены, тогда возникнет ошибка компиляции.
Ответ 2
Оба являются переопределениями.
Когда вы используете ключевое слово override
, вы гарантируете сбой компиляции, если это не должно быть переопределение.
И эта хорошая практика.