
Основы языка
© 2000-2011, MetaQuotes Software Corp.
85
Ссылки. Модификатор & и ключевое слово this
Передача параметров по ссылке
В MQL5 параметры простых типов можно передавать как по значению, так и по ссылке, в то
время как параметры сложных типов всегда передаются по ссылке. Для указания компилятору на
необходимость передачи параметра по ссылке, перед именем параметра ставится знак
амперсанда &.
Передача параметра по ссылке означает передачу адреса переменной, поэтому все изменения,
произведенные над переданным по ссылке параметром, сразу же отобразятся и в исходной
переменной. Используя передачу параметров по ссылке можно организовать возврат
одновременно нескольких результатов из функции. Чтобы предотвратить изменение переданного
по ссылке параметра, необходимо использовать модификатор const.
Таким образом, если входной параметр функции является массивом, объектом структуры или
класса, то в заголовке функции после типа переменной и перед ее именем ставится символ '&'.
Пример
class CDemoClass
{
private:
double m_array[];
public:
void setArray(double &array[]);
};
//+------------------------------------------------------------------+
//| заполнение массива |
//+------------------------------------------------------------------+
void CDemoClass::setArray(double &array[])
{
if(ArraySize(array)>0)
{
ArrayResize(m_array,ArraySize(array));
ArrayCopy(m_array, array);
}
}
В вышеприведенном примере объявлен класс CDemoClass, который содержит приватный член -
массив m_array[] типа double. Объявлена функция setArray(), в которую по ссылке передается
массив array[]. Если заголовок функции написать без указания передачи по ссылке, т.е. убрать
знак амперсанда, то при попытке компиляции такого кода будет выдано сообщение об ошибке.
Несмотря на то, что массив передается по ссылке, мы не можем произвести присвоение одного
массива другому. Необходимо сделать поэлементное копирование содержимого массива-
источника в массив-приемник. Наличие символа & для массивов и структур при передаче в
качестве параметра функции является обязательным при описании функции.
Ключевое слово this
Переменная типа класса (объект) может передаваться как по ссылке, так и по указателю.
Указатель как и ссылка служит для того, чтобы получать доступ к объекту. После объявления