User Guide
The NetTradex language supports the operator overloading feature. Thus, the programmer can choose the way of functioning for any operator applied to instances of user classes. To implement the operator overloading, describe the method that has one of the following names (listed below), this method will be automatically invoked when the corresponding operator is applied.
Operations and their equivalent methods
Equivalent methods for unary prefix operators
Operator | Method |
- | opNeg |
~ | opCom |
++ | opPreInc |
–- | opPreDec |
Equivalent methods for unary postfix operators
Operator | Method |
++ | opPostInc |
–- | opPostDec |
Equivalent methods for comparison operators
Operator | Method |
== | opEquals |
!= | opEquals1 |
< | opCmp |
<= | opCmp2 |
> | opCmp2 |
>= | opCmp2 |
1For the == and != operations, use the single opEquals method, which should return a variable of the bool type. The != operation is processed similarly, but the returned result will be the opposite.
2For the operations <,<=,>,>=, use a single opCmp method, which should return a variable of the int type. If any object passed as a method argument is larger than the instance of an object, where this method is called, the function should return a negative value when they are equal - 0 is returned.
Equivalent methods for assignment operators
Operator | Function |
= | opAssign |
+= | opAddAssign |
-= | opSubAssign |
*= | opMulAssign |
/= | opDivAssign |
%= | opModAssign |
&= | opAndAssign |
|= | opOrAssign |
^= | opXorAssign |
<<= | opShlAssign |
>>= | opShrAssign |
>>>= | opShrAssign |
Equivalent methods for binary operators
Оperator | Function |
+ | opAdd |
- | opSub |
* | opMul |
/ | opDiv |
% | opMod |
& | opAnd |
| | opOr |
^= | opXor |
<< | opShl |
>> | opShr |
>>> | opUShr |
Let us overload the postfix ++ operator and the binary + operator
class A { int a; int b; // Constructors A() { } A(int a, int b) { this.a = a; this.b = b; } // Operation ++ A@ opPostInc() { a++; b++; return this; } // Operation+ 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; }
Indexing operator
Operator | Function |
[] | opIndex |
To access the user class object elements, the function get_opIndex
should be called with a single parameter - the element number. To change the method value, the method set_opIndex
must be implemented with two parameters: the number of the element and the value of the parameter.
Example of using the [] operator for the user class.
class MyArray { // Array where the values are kept array <float> x; // Getting the element value by index float get_opIndex(uint idx) { // If there is no item with this number or a number is negative if((idx > x.length-1) || (idx < 0)) { return 0; } return x[idx]; } // Setting the element value void set_opIndex(uint idx, float value) { // When the index is negative, quit immediately if(idx<0)return; // When there is no element with this index if(idx>=x.length) { for(uint i=x.length; i<idx; i++) { x.insertLast(0); } x.insertLast(value); } // When the element exists else { x[idx]=value; } } // Array content displaying 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; }
Displaying:
[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