Подтвердить что ты не робот

Разница между переопределением и переопределением функции

Предположим, что у меня есть класс 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?

4b9b3361

Ответ 1

Оба B::f() и C::f() являются переопределениями, и они точно совпадают.

override - это, по сути, консультативный термин времени компиляции, который вызовет ошибку компиляции, если функция не переопределяет ее в базовом классе.

Это может помочь стабильности программы: если имя и типы параметров в A::f() будут изменены, тогда возникнет ошибка компиляции.

Ответ 2

Оба являются переопределениями.

Когда вы используете ключевое слово override, вы гарантируете сбой компиляции, если это не должно быть переопределение.

И эта хорошая практика.