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

Alain Verleyen #:

«f» уже является виртуальным из базового класса.

Непонятно, для чего дается такая вольность для написания virtual. Чтение кода не позволяет сразу понять, если бы не было использовано override.

Vladislav Boyko #:

После того обсуждения я никогда не указываю virtual при переопределении метода, но я всегда обязательно указываю override. Больше 2х лет, как я ни разу не указывал virtual для метода, который уже виртуальный из базового класса.

Для меня это плохая практика при чтении кода.

fxsaber #:

Для меня это плохая практика при чтении кода.

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

[edit] Если принять за правило обязательно указывать override, то я нахожу это очень удобным.
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. Когда создаю новый виртуальный метод не в базовом классе, то хочется видеть одинаковость синтаксиса и с переопределенными виртуальными методами.

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