|
9 / 9 / 0
Регистрация: 07.10.2011
Сообщений: 187
|
|
Чем отличается override от virtual?22.12.2015, 16:40. Показов 18505. Ответов 76
Метки нет (Все метки)
Так и не понял.
Если указать метод как override, то он переопределит метод базового класса Для этого метод базового класса должен быть virtual? Но virtual методы и без этого переопределяются, разве не так?
0
|
|
| 22.12.2015, 16:40 | |
|
Ответы с готовыми решениями:
76
Зачем использовать virtual и override? Зачем нужен virtual и override |
|
9 / 9 / 0
Регистрация: 07.10.2011
Сообщений: 187
|
|
| 22.12.2015, 16:53 [ТС] | |
|
Знакомый сказал
0
|
|
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
| 22.12.2015, 16:54 | |
|
override - обязательное переопределение. Если в базовом классе нет такого метода (ты тупо ошибся с сигнатурой) будет ошибка компиляции.
0
|
|
|
|
||
| 22.12.2015, 16:57 | ||
|
ИМХО, это сделано, чтобы компилятор автоматически отыскивал ошибки в неправильном переопределении функций. Ты написал свой класс на основе базового, а твой коллега взял и переписал в нём ключевой переопределяемый метод. Компилятор это обнаружит сразу на этапе компиляции.
Повторяю, ИМХО. Добавлено через 25 секунд
0
|
||
|
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
|
|
| 22.12.2015, 17:00 | |
|
Croessmah, он же в целом правильно изложил.
override означает, что выше в иерархии есть виртуальный метод и он переопределяется, а virtual этого не требует - может быть первым в иерархии.
0
|
|
|
Неэпический
|
|
| 22.12.2015, 17:07 | |
|
nmcf, то есть если не указать override, то ничего не переопределится? Ну и термин "переопределить" как-то тут не очень уместен.
Что касается virtual, то хоть укажи его, хоть нет в наследнике, в любом случае функция-член будет виртуальна в наследнике, если она таковая в базовом. имхо, вот здесь уже уместно "преопределение". Добавлено через 2 минуты Другими словами, override для отлова обидных ошибок, а virtual для позднего связывания.
0
|
|
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
||
| 22.12.2015, 17:15 | ||
|
0
|
||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
| 22.12.2015, 17:18 | |
|
Да. Но я про термин.
1
|
|
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||
| 22.12.2015, 17:39 | ||
|
Croessmah, вы были правы - не ведитесь на них.!
А если не указать, то что? Втык ТСу был заслужен!
0
|
||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|
| 22.12.2015, 17:46 | |
|
0
|
|
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 22.12.2015, 17:55 | ||
|
Если применить override, то сокрытия не произойдет никогда, - только переопределение или ошибка компиляции.
1
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||
| 22.12.2015, 18:50 | |||||||||||||
Сообщение было отмечено rikimaru2013 как решение
Решениеключевое слово override используется для дополнительной подстраховки от ошибок. оно означает, что метод обязательно должен переопределить метод базового класса. если его не указать, то технически можно и не переопределить ничего. например, в наследнике можно реализовать метод с таким же именем, но с альтернативной сигнатурой, который тупо скроет метод базового класса:
всегда скрывают функции-члены базовых классов, за исключением случая, когда область видимости функций-членов базового класса, явным образом расширена до пространства имени наследника: http://rextester.com/BUHNS61944
одна из распространенных новичковых ошибок: они думают, что наследник переопредяя метод, изменяет логику метода базового класса. на самом деле термин "переопределение" довольно тупорый, и сбивает с толку. потому что на самом деле никакого переопределения существующих функций-членов не происходит. наследники лишь добавляют свои собственные со своей собственной логикой, которые скрывают функции-члены базы, и участвуют в полиморфизме. однако, по факту, все функции-члены всех классов иерархии наследования сосуществуют одновременно, и при желании до скрытых методов предков можно дотянуться.
3
|
|||||||||||||
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
| 22.12.2015, 19:00 | |
|
Добавлю на счет стиля. Писать одновременно и
virtual, и override для одной и той же функции, многие считают избыточным. И я в том числе. Т.к. наличие override подразумевает, что функция уже является виртуальной. Аналогично для final. Хотя фактически можно сделать виртуальную функцию непереопределяемой (final) в самом верхнем базовом классе. И тогда писать virtual нужно явно. Но какого-либо разумного объяснения для существования такой функции что-то в голову не приходит.
0
|
|
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
| 22.12.2015, 19:02 | |
|
0
|
|
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
||||||
| 22.12.2015, 19:13 | ||||||
|
Чем отличается override от virtual:
1
|
||||||
|
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
|
|||||||
| 22.12.2015, 19:15 | |||||||
0
|
|||||||
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||
| 22.12.2015, 19:23 | ||
|
0
|
||
| 22.12.2015, 19:23 | |
|
Помогаю со студенческими работами здесь
20
Обязательно ли описывать функцию с override, если в базовом классе уже есть метод с virtual?
В чем различие применение модификатора override и new? Чем отличается =- от -= Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|