Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 179

 
Reshetov:

this - это не указатель сам на себя, а указатель связанный с идентификатором поля в реализации объекта.

Т.е. в каком нибудь методе объекта может присутствовать локальная переменная с аналогичным идентификатором, как и поле и в этом случае отличить указатель на поле объекта от указателя локальной переменной можно с помощью this.

а для каких целей это может быть нужно? можно в качестве примера что ни будь?
 
Barbarian2:
а для каких целей это может быть нужно? можно в качестве примера что ни будь?
Чаще всего это применяется в конструкторах классов, чтобы не выдумывать новые идентификаторы, поскольку именно в конструкторах значения аргументов присваиваются полям объекта.
 
Barbarian2:
а для каких целей это может быть нужно? можно в качестве примера что ни будь?
class node
{
   public:
      void LinkWithNode(node* childNode)
      {
          if(CheckPoint(linkNode) != POINTER_INVALID)
             this.childNode = childNode;
      }
   private:
      node* childNode;
};

class LineNode : node
{
   public:
      LineNode(node* parentNode)
      {
         parentNode.LinkWithNode(GetPointer(this));
      }
};

В данном случае при создании LineNode требуется указать родительский узел, которому будет принадлежать текущий экземпляр LineNode. После этого родительский узел сможет обращаться к этому экземпляру по ссылке на него. В данном примере слово this используется дважды. В первом случае, слово this уточняет, что переменная childNode относится именно к текущему классу, в то время как childNode без this - это одноименная переменная метода LinkWithNode. Во втором случае, this возвращает текущий экземпляр класса, а GetPointer получает указатель на него. Таким образом становиться возможным связывание LineNode уже в момент создания.

 
C-4:

В данном случае при создании LineNode требуется указать родительский узел, которому будет принадлежать текущий экземпляр LineNode. После этого родительский узел сможет обращаться к этому экземпляру по ссылке на него. В данном примере слово this используется дважды. В первом случае, слово this уточняет, что переменная childNode относится именно к текущему классу, в то время как childNode без this - это одноименная переменная метода LinkWithNode. Во втором случае, this возвращает текущий экземпляр класса, а GetPointer получает указатель на него. Таким образом становиться возможным связывание LineNode уже в момент создания.

т.е. во втором случае это приведет к сокращению кода?
 
Barbarian2:
т.е. во втором случае это приведет к сокращению кода?
Да пофигу сокращение (в данном случае).  Не на том концентрируешься.  Употребление this может быть многообразным. Важно понять, что this это синоним экземпляра объекта в котором он (this) используется.  При описании класса, когда экземпляров ещё не существует, this является единственным способом сказать компилятору чего программист имеет в виду.
 
Barbarian2:
т.е. во втором случае это приведет к сокращению кода?

Нет, дело не в этом.  this позволяет управлять экземпляром класса уже в его определении. Зная this мы можем навязывать конкретному экземпляру свое уникальное поведение. Тем самым достигается высокая степень гибкости и абстракции. 

 

Подскажите. Переезжаю с mql4 на 5, собираюсь написать индикатор на 1000 или 10к буферов. Не появилась ли возможность задавать название буферов переменными.

Вроде

пока( а<1000)

а++   В++

имя буфера = буф+а 

буф(а)=iМА(null,  В,)      }

И последующая обработка буеров с таким же зацикливанием 

Или как нибудь ещё сократить время и код с новыми возможностями mql5.

 
Andrei-1:

Прежде всего ограничение вроде 256 буферов (могу ошибаться)

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

 
Спасибо будем изучать.
 
Andrei-1:

Где то в статьях у tol64 видел, навскидку не вспомню, поищите.

TheXpert:

Прежде всего ограничение вроде 256 буферов (могу ошибаться)

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

В справке нет ограничения "Количество индикаторных буферов, которые можно использовать в пользовательском индикаторе, не ограничено.", но где то мелькало 512, поэтому хз.
Причина обращения: