|
9 / 9 / 0
Регистрация: 07.10.2011
Сообщений: 187
|
|
Чем отличается override от virtual?22.12.2015, 16:40. Показов 18482. Ответов 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? Чем отличается =- от -= Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью 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 позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|