Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 507

 
lil_lil:

Индикатор MTF, во внешних настройках ставлю Н1, прикрепляю к графику М15. Сигнал мигает в течении 4 бара. Когда закрывается бар Н1, сигнал не мигает.На М15 сигнал получается на баре 4 перестаёт мигать. Если поставить на М1, соответственно перестаёт мигать на баре 60. вот и нужно посчитать индекс i+N  чтобы N изменялась в зависимости от выбранного периода в настройках и от того на график какого периода прикреплён индикатор.

А есть весь код?

 

Добрый день. Не могу сообразить, апологеты ООП, помогите, пожалуйста.

Есть, значит, класс, например CCandle. В этом классе будут параметры одинаковые для всех объектов данного класа. Эти параметры можно проинициализировать ещё в OnInit() и они будут все одинаковые для всех объектов данного класса. Так вот, как мне правильно это сделать, чтоб не инициализировать их каждый раз при создании нового объекта. Допустим они все в функции CCandle::Init(). Не могу сообразить.

 
Juer:

Добрый день. Не могу сообразить, апологеты ООП, помогите, пожалуйста.

Есть, значит, класс, например CCandle. В этом классе будут параметры одинаковые для всех объектов данного класа. Эти параметры можно проинициализировать ещё в OnInit() и они будут все одинаковые для всех объектов данного класса. Так вот, как мне правильно это сделать, чтоб не инициализировать их каждый раз при создании нового объекта. Допустим они все в функции CCandle::Init(). Не могу сообразить.

Это делается в списке инициализации, который располагается в конструкторе класса:

class CCandle
{
   int      m_nA;
   double   m_fB;
   datetime m_dtC;


   void CCandle::CCandle(void);
};

CCandle::CCandle(void)
            : m_nA(0)
            , m_fB(0.0)
            , m_dtC(0)
{
}
 
Juer:

Добрый день. Не могу сообразить, апологеты ООП, помогите, пожалуйста.

Есть, значит, класс, например CCandle. В этом классе будут параметры одинаковые для всех объектов данного класа. Эти параметры можно проинициализировать ещё в OnInit() и они будут все одинаковые для всех объектов данного класса. Так вот, как мне правильно это сделать, чтоб не инициализировать их каждый раз при создании нового объекта. Допустим они все в функции CCandle::Init(). Не могу сообразить.

Сделайте параметрический конструктор в классе, и передавайте в него нужные ппраметры для инициализации объекта 
 
Я ничего не понял. Проинициализировать для объекта не проблема. Как мне проинициализировать один раз для всех объектов данного класса? То есть, создается новый объект, а параметры уже проинициализированы значениями, без необходимости инициализировать их каждый раз для каждого нового объекта.
 
Коллеги, подскажите, пожалуйста, правомерно ли использовать оператор return из тела цикла? Например, есть функция, в которой имеем цикл. В какой-то момент нам надо возвратить некое значение и тем самым выйти из функции. Правильно использовать break, а затем уже и return(value). Но можно ли сразу return(value)?
 
Juer:
Я ничего не понял. Проинициализировать для объекта не проблема. Как мне проинициализировать один раз для всех объектов данного класса? То есть, создается новый объект, а параметры уже проинициализированы значениями, без необходимости инициализировать их каждый раз для каждого нового объекта.
Параметры можно инициализировать у того, что существует.
 
lsv107:
Коллеги, подскажите, пожалуйста, правомерно ли использовать оператор return из тела цикла? Например, есть функция, в которой имеем цикл. В какой-то момент нам надо возвратить некое значение и тем самым выйти из функции. Правильно использовать break, а затем уже и return(value). Но можно ли сразу return(value)?
Ничто не мешает выйти из цикла.
 
Artyom Trishkin:
Параметры можно инициализировать у того, что существует.

Как бы постановка вопроса, вроде, понятна же. Смысл инициализировать одно и то же.

 
Artyom Trishkin:
Ничто не мешает выйти из цикла.

Просто опасался того, что цикл останется активным внутри функции, а оператор return лишь передаст управление из активного цикла в точку вызова, возникнет опасность переполнения стека, если произойдет повторный вызов функции(рекурсия). Совершенно точно так было в Pascal, да и вообще по правилам структурного программирования следует последовательно завершать циклы, а затем выходить из функции. Если return вместе с функцией прекращает работу цикла, то отлично, но уточнить надо было, так как я к программированию вернулся после долгого перерыва.

Причина обращения: