Учёба. Классы. Нужна помощь. - страница 26

 
Alexey Viktorov #:

То-есть в СБ отсутствие override к методу QuickSort() из CArrayObj() можно считать ошибкой?

Это небрежность.
 
Vladislav Boyko #:

Погремушка не обязательна. Она только для вашего удобства. Виртуальная функция будет переопределена независимо от наличия override.

Можете убрать из этого кода override и он будет работать точно так-же.

Но если вы допустите где-то опечатку (например, случайно указали немного другое имя функции), то при наличии override компилятор вам выдаст ошибку

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

Пару раз потратите время на дебаг на ровном месте и поймете, что с погремушкой сильно лучше, чем без нее

Верно, это в справке полностью описано, но товарищ почему-то презрительно называет это погремушкой. Вангую, для него и варнинги тоже погремушки )) Процитирую справку:

Модификатор override

Модификатор override означает, что объявляемая функция обязательно должна переопределить метод родительского класса. Использование этого модификатора позволяет избежать ошибок при переопределении, таких как случайное изменение сигнатуры метода. Например, в базовом классе определен метод func, принимающий в качестве аргумента переменную типа int:

class CFoo
  {
   void virtual func(int x) const { }
  };

Далее метод переопределяется в наследуемом классе:

class CBar : public CFoo
  {
   void func(short x) { }
  };

Но по ошибке тип аргумента изменяется с int на short. Фактически, в этом случае уже происходит не переопределение, а перегрузка метода. Действуя в соответствии с алгоритмом определения перегруженной функции, в определенных ситуациях компилятор может выбрать метод, определенный в базовом классе, вместо переопределенного метода.

Чтобы избежать подобных ошибок, к переопределяемому методу следует явно добавлять модификатор override.

class CBar : public CFoo
  {
   void func(short x) override { }
  };

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

'CBar::func' method is declared with 'override' specifier but does not override any base class method

 
Alexey Volchanskiy #:

Верно, это в справке полностью описано, но товарищ почему-то презрительно называет это погремушкой. Вангую, для него и варнинги тоже погремушки )) 


Это было всего лишь предположение. Для того чтобы более опытные товарищи объяснили, что это не так…

И когда доходчиво объяснили

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Учёба. Классы. Нужна помощь.

Alexey Viktorov, 2024.12.17 17:52

Так и я о том-же. Погремушка она и есть погремушка никому не нужная. Просто для удобства чтения.

Ну да… После добавления вашего сообщения, согласен. Это когда пишешь что-то своё, для предупреждения ошибки… Полезно.
А ванго-подражатель из тебя никудышный. Тебя не пустят в «клуб телепатов»
 
Alexey Viktorov #:

Тут нет погремушки  override 

Вот я о чём…

Могу предположить, что override в компиляторе появилось позже, чем была написана эта часть СБ.

 
JRandomTrader #:

Могу предположить, что override в компиляторе появилось позже, чем была написана эта часть СБ.

Да собственно не очень важно по какой причине нету. Я понял полезность этой, пусть всё-же будет погремушкой, полезной погремушкой… И это главное. Без понимания, пользоваться чем либо, бывает очень опасно.

 
Alexey Viktorov #:

Да собственно не очень важно по какой причине нету. Я понял полезность этой, пусть всё-же будет погремушкой, полезной погремушкой… И это главное. Без понимания, пользоваться чем либо, бывает очень опасно.

Не знаю, обрадуетесь Вы или нет, но в MQL5 относительно недавно появились  ещё и другие "погремушки", как то: final, delete.

Ещё есть такая штука, как шаблоны проектирования. У Мохамеда есть целый цикл статей. Но как по мне, там практически нет примеров, что уменьшает полезность материала. В паттернах также можно найти частое использование полиморфизма...

Коллеги, вы как, дружите с шаблонами проектирования в рамках MQL5? ))

Шаблоны проектирования в MQL5 (Часть I): Порождающие шаблоны (Creational Patterns)
Шаблоны проектирования в MQL5 (Часть I): Порождающие шаблоны (Creational Patterns)
  • www.mql5.com
Существуют методы, которые можно использовать для решения типовых задач. Поняв один раз, как использовать эти методы, можно затем эффективно писать программы и применять концепцию DRY ("Не повторяйся"). В этом контексте очень полезными оказываются шаблоны проектирования, которые могут давать решения хорошо описанных и повторяющихся проблем.
 
Denis Kirichenko #:
У Мохамеда есть целый цикл статей. Но как по мне, там практически нет примеров, что уменьшает полезность материала.

Не перестаю удивляться его статьям. В том-то и дело, что нет никаких примеров. Выглядит как тупой рерайтинг общедоступной информации из гугла.

Берешь любую книгу с паттернами, забираешь оттуда абстрактные примеры, вносишь небольшие правки в код, что бы его мог переварить MQL компилятор и статься готова. Можно через chatgpt пропустить описание, что бы не было прям слово в слово с книгой из которой ты это позаимствовал. Ну и схемы самому перерисовать что бы внаглую картинки не воровать и не спалить по картинке оригинальный материал.

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


А знаете, что самое смешное? Человек, который учит шаблонам проектирования, в других статьях пишет процедурный код. Почему же ты шаблоны свои не используешь, архитектор?

 
Vladislav Boyko #:

Я конечно допускаю, что это авторский материал, а не рерайтинг. В этом случае очень неудачная и супер сухая подача. Такая подача, как уже говорилось, уменьшает умножает на ноль ценность материала.

[edit]

Если убрать шаблоны проектирования, то остальные статьи (того автора) наверное выглядят как какие-то обычные статьи и не дают особо поводоа для критики. Но те шаблоны проектирования,.. да еще и на фоне остальных его статей... Вызывают недоумение и вопросы, скажем так.

 
Denis Kirichenko #:

Коллеги, вы как, дружите с шаблонами проектирования в рамках MQL5? ))

Шаблон Singleton использую в нескольких местах, и это, пожалуй, единственный шаблон, который мне реально принёс пользу. С другими как-то не сложилось... 

 
Denis Kirichenko #:
e
Yuriy Bykov #:

Шаблон Singleton использую в нескольких местах, и это, пожалуй, единственный шаблон, который мне реально принёс пользу. С другими как-то не сложилось... 

Мне фабрика классов несколько раз пригождалась.