Ошибки, баги, вопросы - страница 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...
 

Всех приветствую. Такая проблема. 

Есть индикатор, который в функции int OnInit() запрашивает число баров по текущему символу: 

SeriesInfoInteger(strSymbolName,etTimeframe,SERIES_BARS_COUNT,lResult)

Потом запрашиваются бары, и по ним строится индикатор. 

Проблема:

При запуске индикатора - всё проходит нормально. Однако, если закрыть терминал, и перезапустить его (индикатор остался на графике), то функция запроса баров SeriesInfoInteger() в функции OnInit() возвращает false, а запрос GetLastError() возвращает код 4401 (ERR_HISTORY_NOT_FOUND). 

То есть, получается, что при перезапуске терминала - история баров в момент инициализации индикатора ещё не готова? 

Кто-нибудь с таким сталкивался? Что я делаю не так? Вроде раньше у меня подобного никогда не было... 

Интересно, что в МТ4 тот же код работает нормально, и при перезапуске терминала - функция возвращает верный ответ, и дальше индикатор работает корректно. Как в МТ5 убедиться внутри функции OnInit, что бары таймсерии есть, и узнать, сколько их? (Так, чтобы при перезапуске терминала - всё возвращалось правильно)