Руководство пользователя
-
Руководство по 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