img

Operators overloading

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

OperatorMethod
-opNeg
~opCom
++opPreInc
–- opPreDec

Equivalent methods for unary postfix operators

OperatorMethod
++opPostInc
–-opPostDec

Equivalent methods for comparison operators

OperatorMethod
==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

OperatorFunction
=opAssign
+=opAddAssign
-=opSubAssign
*=opMulAssign
/=opDivAssign
%=opModAssign
&=opAndAssign
|=opOrAssign
^=opXorAssign
<<=opShlAssign
>>=opShrAssign
>>>=opShrAssign

Equivalent methods for binary operators

ОperatorFunction
+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

OperatorFunction
[]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