Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Интересуют возможности MQL5? Загляни в документацию!
Glaswegian
485
Glaswegian 2014.11.11 17:33 

https://docs.mql4.com/ru/basis/types/classes

Конструктор по умолчанию имеет специальное назначение при инициализации массива объектов своего класса. Конструктор, все параметры которого имеют значения по умолчанию, не является конструктором по умолчанию. Покажем это на примере:

 

void OnStart()
  {
// CFoo foo; // такой вариант использовать нельзя - конструктор по умолчанию не задан
//--- допустимые варианты создания объекта CFoo
   CFoo foo1(TimeCurrent());     // явный вызов параметрического конструктора
   CFoo foo2();                  // явный вызов параметрического конструктора с параметром по умолчанию
   CFoo foo3=D'2009.09.09';      // неявный вызов параметрического конструктора
   CFoo foo40(foo1);             // явный вызов конструктора копирования
   CFoo foo41=foo1;              // неявный вызов конструктора копирования
   CFoo foo5;                    // явный вызов конструктора по умолчанию (если конструктор по умолчанию отсутствует,
                                 
// то вызывается параметрический конструктор с параметром по умолчанию) 


И проверить нельзя, ибо пример не компилируется:

'foo4' - undeclared identifier

Простак
315
Простак 2014.11.11 22:26  
Irtron:

https://docs.mql4.com/ru/basis/types/classes

Конструктор по умолчанию имеет специальное назначение при инициализации массива объектов своего класса. Конструктор, все параметры которого имеют значения по умолчанию, не является конструктором по умолчанию. Покажем это на примере:

 

void OnStart()
  {
// CFoo foo; // такой вариант использовать нельзя - конструктор по умолчанию не задан
//--- допустимые варианты создания объекта CFoo
   CFoo foo1(TimeCurrent());     // явный вызов параметрического конструктора
   CFoo foo2();                  // явный вызов параметрического конструктора с параметром по умолчанию
   CFoo foo3=D'2009.09.09';      // неявный вызов параметрического конструктора
   CFoo foo40(foo1);             // явный вызов конструктора копирования
   CFoo foo41=foo1;              // неявный вызов конструктора копирования
   CFoo foo5;                    // явный вызов конструктора по умолчанию (если конструктор по умолчанию отсутствует,
                                 
// то вызывается параметрический конструктор с параметром по умолчанию) 


И проверить нельзя, ибо пример не компилируется:

'foo4' - undeclared identifier

Ну, и что, что документация такого качества, зато её - много, особенно по MQL5, и Renat это убедительно вчера обосновывал, с цифрами.

Исправьте:

   Print("foo1.m_call_time=",foo1.ToString());
   Print("foo2.m_call_time=",foo2.ToString());
   Print("foo3.m_call_time=",foo3.ToString());
   Print("foo4.m_call_time=",foo4.ToString());
   Print("foo5.m_call_time=",foo5.ToString());
   Print("pfoo6.m_call_time=",pfoo6.ToString());
   Print("pfoo7.m_call_time=",pfoo7.ToString());
   Print("pfoo8.m_call_time=",pfoo8.ToString());
   Print("pfoo9.m_call_time=",pfoo9.ToString());

на

   Print("foo1.m_call_time=",foo1.ToString());
   Print("foo2.m_call_time=",foo2.ToString());
   Print("foo3.m_call_time=",foo3.ToString());
   Print("foo4.m_call_time=",foo40.ToString());
   Print("foo4.m_call_time=",foo41.ToString());
   Print("foo5.m_call_time=",foo5.ToString());
   Print("pfoo6.m_call_time=",pfoo6.ToString());
   Print("pfoo7.m_call_time=",pfoo7.ToString());
   Print("pfoo8.m_call_time=",pfoo8.ToString());
   Print("pfoo9.m_call_time=",pfoo9.ToString());

и, наверное, станет можно проверить.

Комбинатор
15653
Комбинатор 2014.11.11 22:36  
Вообще-то конструктор с параметром по умолчанию и конструктор по умолчанию это одно и то же. Должно быть по крайней мере.
Простак
315
Простак 2014.11.11 23:15  
TheXpert:
Вообще-то конструктор с параметром по умолчанию и конструктор по умолчанию это одно и то же. Должно быть по крайней мере.

Это в C++. Но здесь - MQL4++, в тонкостях может отличаться.

Вон, у них вообще на MQL4++ написано:

  CFoo foo2();                  // явный вызов параметрического конструктора с параметром по умолчанию

В C++ это - декларация функции.

Или та же ссылка на массив при передаче в функцию:

void f(int &array[]);

В C++ это - массив ссылок, что является невозможным в C++ типом объекта.

/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий