Назад к вопросам
JuniorТеорияЧасто
Что произойдёт при сборке и запуске этой программы?
#include <iostream>
struct Base {
virtual void print(int x) const { std::cout << "Base " << x; }
};
struct Derived : public Base {
void print(long x) const override { std::cout << "Derived " << x; }
};
int main() { Derived d; const Base& b = d; b.print(1); }Не скомпилируется: print(long) ничего не переопределяет в Base
- Ждать
Base 1: компилятор проверяетoverride— функция с ним должна переопределять виртуальную функцию базового класса, иначе программа не скомпилируется. - Ждать
Derived 1: переопределению нужны те же типы параметров, поэтомуprint(long)иprint(int)— разные функции, хотя1и преобразуется вlong.
- Что выведет программа, если убрать слово
override? - Зачем рядом с
overrideиногда пишутfinal?