Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/89: Рейтинг темы: голосов - 89, средняя оценка - 4.85
9 / 9 / 0
Регистрация: 07.10.2011
Сообщений: 187

Чем отличается override от virtual?

22.12.2015, 16:40. Показов 18947. Ответов 76
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Так и не понял.
Если указать метод как override, то он переопределит метод базового класса
Для этого метод базового класса должен быть virtual?
Но virtual методы и без этого переопределяются, разве не так?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.12.2015, 16:40
Ответы с готовыми решениями:

Virtual и override
Доброго времени суток, может кто обьяснить мне зачем использовать virtual и ovveride если и без них все работает: using System; ...

Зачем использовать virtual и override?
Зачем использовать virtual и override, если и без них все замечательно работает, например: class First { public virtual string ...

Зачем нужен virtual и override
Подскажите пожалуйста, вот пример №1: class Vader { public string Fok() { return...

76
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
22.12.2015, 23:48
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Tulosba Посмотреть сообщение
Вот про auto хороший пример
чем? то что примеру более 15 лет?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
22.12.2015, 23:51
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
чем? то что примеру более 15 лет?
До 11-ого стандарта auto было старого образца. Так что примеру лет эдак 5 всего.
Ну тогда вот Вам другой, не имеющий срока давности.
C++
1
2
void foo();//Фу, ленивый шарпей
extern void foo();//Во, наш чувак! Реально приплюснутый.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
22.12.2015, 23:54
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
то что примеру более 15 лет?
Откуда ты 15-то взял? auto только с C++11 смысл поменяло. 4 года всего.
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
23.12.2015, 00:01
Цитата Сообщение от Tulosba Посмотреть сообщение
Откуда ты 15-то взял?
По моему мнение лет так 15 компиляторам наплевать на это было (с++98 до с++11)
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
23.12.2015, 00:04
Цитата Сообщение от Tulosba Посмотреть сообщение
истинный архаичный плюсист!
Не, истинные архаичные плюсисты на Си пишут и не парятся. Единственно, свою сишню почему-то упорно в этот раздел пихают.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
23.12.2015, 00:12
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
По моему мнение лет так 15 компиляторам наплевать на это было (с++98 до с++11)
Причем здесь наплевать? Стековые переменные являются автоматическими. Так что они auto по-умолчанию.
А раз auto подразумевается по дефолту, то и auto писать не нужно.
Так вопрос, если override подразумевает virtual, то нафига писать virtual?

Добавлено через 53 секунды
Цитата Сообщение от Mr.X Посмотреть сообщение
Единственно, свою сишню почему-то упорно в этот раздел пихают.
потому что большинство студентов этого и хотят.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
23.12.2015, 00:43
Ну давайте я что-ли приведу вам выдержку из C++ Core Guidelines, которую активно пилят Саттер, Страуструп и иже с ними. Сама выдержка, по коммиту вижу, авторством Саттера.
Readability. Detection of mistakes. Writing explicit virtual, override, or final is self-documenting and enables the compiler to catch mismatch of types and/or names between base and derived classes. However, writing more than one of these three is both redundant and a potential source of errors.

Use virtual only when declaring a new virtual function. Use override only when declaring an overrider. Use final only when declaring an final overrider.

Enforcement

Compare names in base and derived classes and flag uses of the same name that does not override.
Flag overrides with neither override nor final.
Flag function declarations that use more than one of virtual, override, and final.
Выделения от меня.

Ну тут как бы все логично, и я с ним согласен. Лучше например иметь четко или virtual, или override, чем всегда иметь virtual и фиг знать, не забыли ли тут еще и override.
5
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
23.12.2015, 00:48
Цитата Сообщение от Croessmah Посмотреть сообщение
потому что большинство студентов этого и хотят.
Ну так пусть и пишут в сишный раздел сишникам, этот-то при чем?
0
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
23.12.2015, 01:01
ct0r, ссылку?
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
23.12.2015, 01:03
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
ссылку?
https://github.com/isocpp/CppC... delines.md
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
23.12.2015, 07:36
Цитата Сообщение от Croessmah Посмотреть сообщение
Стековые переменные являются автоматическими.
скорее автоматические являются стековыми
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
23.12.2015, 13:15
Kastaneda, как по мне, то стековые являются автоматическими
Block-scope variables explicitly declared register or not explicitly declared static or extern have automatic storage duration.
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
23.12.2015, 13:28
Croessmah,
have automatic storage duration
это лишь означает, что они будут созданы/разрушены автоматически при входе/выходе в/из области видимости. И так получилось, что на x86 автоматические переменные лежат на стеке. Но размещение переменной на стеке не говорит о том, что она автоматическая.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
23.12.2015, 13:39
Цитата Сообщение от Croessmah Посмотреть сообщение
Стековые переменные являются автоматическими.
Цитата Сообщение от Kastaneda Посмотреть сообщение
скорее автоматические являются стековыми
Ну в общем случае ни то, ни то, разве нет?
Автоматические - это про время.
Стековые - это про место.
Если я пишу бэкенд под какую-то архитектуру, то я могу извращаться как хочу
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
23.12.2015, 13:50
Цитата Сообщение от Kastaneda Посмотреть сообщение
это лишь означает, что они будут созданы/разрушены автоматически при входе/выходе в/из области видимости.
ну вот, то бишь стековые переменные частный случай автоматических
Цитата Сообщение от ct0r Посмотреть сообщение
Если я пишу бэкенд под какую-то архитектуру, то я могу извращаться как хочу
Извращаться то все могут
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.12.2015, 14:00
Цитата Сообщение от Croessmah Посмотреть сообщение
Извращаться то все могут
Для кого извращение, а для кого и норма

Добавлено через 1 минуту
Цитата Сообщение от ct0r Посмотреть сообщение
Ну тут как бы все логично, и я с ним согласен.
Но не с инициализацией констант в лямбде, да?
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
23.12.2015, 14:12
Официальный термин - автоматическая память, однако Страуструп пишет, что ее еще называют "памятью в стеке", т.е. термин из операционных систем используется как жаргонный.
Таким образом, выражение
Цитата Сообщение от Croessmah Посмотреть сообщение
Стековые переменные являются автоматическими
является тавтологией.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
23.12.2015, 14:51
Цитата Сообщение от Tulosba Посмотреть сообщение
Но не с инициализацией констант в лямбде, да?
Про это не сам Саттер писал, во-первых А во-вторых, я не говорил, что против инициализации констант в лямбде. Я против сложной логики в этой инициализации. В этом гайде кстати написано, что подразумевается сложность уровня moderate - то есть умеренная, небольшая, здравая.
0
9 / 9 / 0
Регистрация: 07.10.2011
Сообщений: 187
23.12.2015, 15:45  [ТС]
Я вот вас почитал, и ещё больше запутался
т.е. методы переопределяются и без virtual? (если забыть про override)
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
23.12.2015, 15:48
Fangod, если в базовом классе функция-член виртуальна, то в наследнике она тоже будет виртуальна, даже если писать без virtual и без override.
C++
1
2
3
4
5
6
7
8
9
struct X
{
   virtual void foo() {} 
};
 
class Y
{
  void foo() {} //Тоже виртуальная
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.12.2015, 15:48
Помогаю со студенческими работами здесь

Обязательно ли описывать функцию с override, если в базовом классе уже есть метод с virtual?
Здравствуйте, хотел узнать обязательно ли описывать функцию с override если к примеру в базовом классе уже есть метод с virtual? Ведь без...

В чем разница между new и override?
разница между new и override?

В чем разница между new и override?
Цитирую с msdn: Для чего нужно вообще использовать new? поведение методов одно и то же что и при override. Или мой код слишком...

В чем различие применение модификатора override и new?
Добрый день ! Подскажите в чем различие применение модификатора override и new ? virtual String ^ToString() new; virtual...

Чем отличается =- от -=
Только подробно опишите пожалуйста,у меня из-за этого программа в циклах не правильно считает


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru