Ошибки, баги, вопросы - страница 3661

 
Vladislav Boyko #:

Почему плохая? Разве override не достаточно, чтобы понять что метод виртуальный (и перегруженный)?

Чтобы понять, что он виртуальный, не достаточно.
 
Vladislav Boyko #:

Почему плохая? Разве override не достаточно, чтобы понять что метод виртуальный (и перегруженный)?

override позволяет понять, что это виртуальный метод. Но два нюанса.

  1. Читаю слева-направо. Если входных много и они располагаются на нескольких строках, то override могу не увидеть.
  2. Когда создаю новый виртуальный метод не в базовом классе, то хочется видеть одинаковость синтаксиса и с переопределенными виртуальными методами.
 
Sergey Gridnev #:
Чтобы понять, что он виртуальный, не достаточно.

Если вы укажите override для не виртуального метода, то вы получите ошибку компиляции. Если нет ошибки компиляции и есть override - метод гарантировано виртуальный.

 
Vladislav Boyko #:
(и перегруженный)
Не "перегруженный", "переопределённый".
 
Vladislav Boyko #:
Если вы укажите override для не виртуального метода, то вы получите ошибку компиляции
Нет
 
Sergey Gridnev #:
Не "перегруженный", "переопределённый".

Исправил опечатку, спасибо.

Sergey Gridnev #:
Нет

Докажите примером, пожалуйста

 
fxsaber #:

override позволяет понять, что это виртуальный метод. Но два нюанса.

  1. Читаю слева-направо. Если входных много и они располагаются на нескольких строках, то override могу не увидеть.
  2. Когда создаю новый виртуальный метод не в базовом классе, то хочется видеть одинаковость синтаксиса и с переопределенными виртуальными методами.

Думаю, это дело привычки и договоренностей в команде (моя команда состоит из меня одного, я сам с собой договариваюсь).

 
Vladislav Boyko #:
Докажите примером, пожалуйста
Я с 2022 не писал под мкл, возможно, разработчики за это время "улучшили" компиллятор. Вообще, виртуальность метода определяет, как будет вызываться метод через указатель/ссылку на объект.

PS.
В прикреплённом файле кусок код, который компилироваться без ошибок. Там и виртуальные методы и не виртуальный.

PPS.
Смотрю, не виртуальный метод, действительно, не оверрайден.
Файлы:
 
fxsaber # :

override позволяет понять, что это виртуальный метод. Но два нюанса.

  1. Читаю слева-направо. Если входных много и они располагаются на нескольких строках, то override могу не увидеть.
  2. Когда создаю новый виртуальный метод не в базовом классе, то хочется видеть одинаковость синтаксиса и с переопределенными виртуальными методами.

Это два личных предпочтения, и надеяться, что язык их удовлетворит, не стоит. Вы свободны использовать то, что считаете нужным.

Тема C++ для справки .

Should I use virtual, override, or both keywords?
Should I use virtual, override, or both keywords?
  • 2016.10.08
  • Daniel Daniel 2,463 2 2 gold badges 11 11 silver badges 6 6 bronze badges
  • stackoverflow.com
In the last weeks something is bugging my brain about and . I've learned that when you do inheritance with virtual function you have to add to let the compiler know to search for the right function. Afterwards I learned also that in c++ 11 there is a...