Руководство пользователя
-
Руководство по NTTX Advisors
- Терминал NetTradeX Advisors
-
Статьи
-
NetTradeX Language: Введение
- Основы языка
- Функции языка
-
Cистемные объекты языка
- Сделки
- Ордера
- Индикаторы
- Объектно-ориентированное программирование
-
DLL файлы
-
Объект Account
-
Объект Bars
-
Объект Chart
-
Объект datetime
-
Объект History
-
Объект file
-
Объект Globals
-
Объект Math
-
Объект Symbols
-
Объект System
В языке NetTradex имеется возможность перегрузки операторов. Таким образом программист может сам определить, как будет функционировать тот или иной оператор, применяемый к экземплярам объектов пользовательского класса. Для осуществления перегрузки оператора необходимо описать метод, имеющий одно из указанных ниже имен, этот метод будет автоматически вызываться при применении соответствующего оператора.
Операции и их эквивалентные методы
Эквивалентные методы для унарных префиксных операторов
| Оператор | Метод |
| - | opNeg |
| ~ | opCom |
| ++ | opPreInc |
| –- | opPreDec |
Эквивалентные методы для унарных постфиксных операторов
| Оператор | Метод |
| ++ | opPostInc |
| –- | opPostDec |
Эквивалентные методы для операторов сравнения
| Оператор | Метод |
| == | opEquals |
| != | opEquals1 |
| < | opCmp |
| <= | opCmp2 |
| > | opCmp2 |
| >= | opCmp2 |
1Для операций == и != используется единый метод opEquals, который должен возвращать переменную типа bool. Операция != обрабатывается аналогичным образом, только возвращаемый результат будет обратным.
2Для операций <,<=,>,>= используется единый метод opCmp, который должен возвращать переменную типа int. Если объект передаваемый, как аргумент метода считается больше экземпляра объекта, у которого вызывается этот метод, функция должна возвращать отрицательное значение, если они равны между собой - возвращать 0.
Эквивалентные методы для операторов присваивания
| Оператор | Функция |
| = | opAssign |
| += | opAddAssign |
| -= | opSubAssign |
| *= | opMulAssign |
| /= | opDivAssign |
| %= | opModAssign |
| &= | opAndAssign |
| |= | opOrAssign |
| ^= | opXorAssign |
| <<= | opShlAssign |
| >>= | opShrAssign |
| >>>= | opShrAssign |
Эквивалентные методы для бинарных операторов
| Оператор | Функция |
| + | opAdd |
| - | opSub |
| * | opMul |
| / | opDiv |
| % | opMod |
| & | opAnd |
| | | opOr |
| ^= | opXor |
| << | opShl |
| >> | opShr |
| >>> | opUShr |
Перегрузим постфиксный оператор ++ и бинарный +
class A
{
int a;
int b;
// Конструкторы
A()
{
}
A(int a, int b)
{
this.a = a;
this.b = b;
}
// Операция ++
A@ opPostInc()
{
a++;
b++;
return this;
}
// Операция +
A@ opAdd(const A &in other)
{
A obj;
obj.a = this.a + other.a;
obj.b = this.b + other.b;
return obj;
}
void Print()
{
System.Print("a="+a+" b="+b);
}
}
int Run()
{
A x(5,10);
x++;
x.Print();
A y(7,11);
A w(3,4);
A s;
s = y + w;
s.Print();
return 0;
}
Оператор индексирования
| Оператор | Функция |
| [] | opIndex |
Для получения доступа к элементам объекта пользовательского класса, функция должна быть названа get_opIndex с единственным параметром - номером элемента. Для изменения значения элемента должен быть реализован метод set_opIndex с двумя параметрами: номер элемента и значение параметра.
Пример использования оператора [] для пользовательского класса.
class MyArray
{
// Массив, где мы будем хранить значения
array <float> x;
// Получение значения элемента по индексу
float get_opIndex(uint idx)
{
// Если элемента с таким номером нет или получен отрицательный номер
if((idx > x.length-1) || (idx < 0))
{
return 0;
}
return x[idx];
}
// Установка значения элемента
void set_opIndex(uint idx, float value)
{
// При отрицательном индексе сразу выходим
if(idx<0)return;
// Если элемента с таким индексом нет
if(idx>=x.length)
{
for(uint i=x.length; i<idx; i++)
{
x.insertLast(0);
}
x.insertLast(value);
}
// Если элемент есть
else
{
x[idx]=value;
}
}
// Вывод содержания массива
void Print()
{
string output;
for(uint i=0;i<x.length;i++)
{
output+=" ["+i+"]="+x[i];
}
System.Print(output);
}
}
int Run()
{
MyArray a;
a[2]=22;
a.Print();
a[4]=44;
a.Print();
a[3]=33;
a.Print();
return 0;
}
Вывод:
[0]=0 [1]=0 [2]=22 [0]=0 [1]=0 [2]=22 [3]=0 [4]=44 [0]=0 [1]=0 [2]=22 [3]=33 [4]=44