Новая версия платформы MetaTrader 5 build 2085: Интеграция с Python и массовые улучшения в тестере стратегий - страница 46

 
Andrey Barinov:

№1. Метод не переопределен, а перегружен.

№2. Ни один из этих методов не пустой.

По пункту 1: это просто вопрос правильного использования терминологии, или есть разница между "метод переопределён" и "метод перегружен"?

По пункту 2: да, я высказался не корректно, хотя в моём понимании ОБА ваших метода, что в родительском классе, что в потомке - пустые. Потому-что {} в обоих случаях. Но в родительском классе у вас в метод Test ничего не должно передаваться, а в классе-потомке в этот метод должно передаваться целочисленное значение. Поэтому только вторая форма вызова метода для объекта-наследника является корректной.

 
BlackTomcat:

По пункту 1: это просто вопрос правильного использования терминологии, или есть разница между "метод переопределён" и "метод перегружен"?

По пункту 2: да, я высказался не корректно, хотя в моём понимании ОБА ваших метода, что в родительском классе, что в потомке - пустые. Потому-что {} в обоих случаях. Но в родительском классе у вас в метод Test ничего не должно передаваться, а в классе-потомке в этот метод должно передаваться целочисленное значение. Поэтому только вторая форма вызова метода для объекта-наследника является корректной.

Вы так шутите?

 
Andrey Barinov:

Вы так шутите?

Серьёзен, как никогда. :) Шутил бы - добавил смайлик.
А вы таким образом уклоняетесь от вопроса? В частности, по пункту 1.
 
BlackTomcat:
Серьёзен, как никогда. :) Шутил бы - добавил смайлик.
А вы таким образом уклоняетесь от вопроса? В частности, по пункту 1.

Есть разница.

 
Andrey Barinov:

Есть разница.

Окей, спасибо. Пойду почитаю документацию чтобы понять, в чём же она заключается.
 
Andrey Barinov:

Есть разница.

Да, разница действительно есть, спасибо! И она в мою пользу, а вот вы как-раз таки некорректно использовали терминологию.

 
BlackTomcat:

Да, разница действительно есть, спасибо! И она в мою пользу, а вот вы как-раз таки некорректно использовали терминологию.

Ого.

Поясните. Я сказал что эти методы перегружены. Вы говорите, что они переопределены. Обоснуйте.

 
Andrey Barinov:

Можете все-таки пояснить, почему в этом коде теперь предупреждение?

Методы имеют разные сигнатуры...

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

Новая версия платформы MetaTrader 4 build 1170

Ilyas, 2019.08.26 10:31

В MQL вводится переопределение методов.

Это означает, что вызываемый родительский метод скрыт методом потомка (пока такое разрешили, выдаёся предупреждение, чтобы пользователи успели адаптировать свои существующие коды).

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

class A
  {
public:
   bool       Test(const bool test) {return(true);}
  };
class B : public A
  {
   void       Test(void) { this.A::Test(true); } // deprecated behavior, hidden method calling will be disabled in a future MQL compiler version
  };

 
Andrey Barinov:

Ого.

Поясните. Я сказал что эти методы перегружены. Вы говорите, что они переопределены. Обоснуйте.

Последний абзац в статье Документации про Полиморфизм. Ну и в других статьях тоже встречается, например, про перегрузку функций (но не только в ней). Если резюмировать, то термин "перегрузка" используется, если функции или методы определены на одном уровне, если же одноимённые методы определены на разных уровнях иерархии, то происходит "переопределение".
https://www.mql5.com/ru/docs/basis/oop/polymorphism
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Полиморфизм
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Полиморфизм
  • www.mql5.com
Полиморфизм – это возможность для объектов разных классов, связанных с помощью наследования, реагировать различным способом при обращении к одной и той же функции-элементу. Это помогает создавать универсальные механизмы, описывающие поведение не только базового класса, но и классов-потомков. Продолжим разработку базового класса CShape, в...
Причина обращения: