Files
harbour-core/tests/overload.prg
2017-09-14 01:12:12 +00:00

60 lines
1.7 KiB
Plaintext

//
// Implementation of operator overload in Harbour
//
// Written by Eddie Runia <eddie@runia.com>
//
// Placed in the public domain
//
#include "hbclass.ch"
PROCEDURE Main()
LOCAL oString := TString():New( "Hello" )
? "Testing TString with Operator Overloading"
? oString:cValue
? "---"
? ValType( oString )
? "Equal........:", oString = "Hello"
? "Exactly Equal:", oString == "Hello"
? "Not Equal != :", oString != "Hello"
? "Not Equal <> :", oString <> "Hello"
? "Not Equal # :", oString # "Hello"
? "Substring $ :", oString $ "Hello"
? "Less than :", oString < "Hello"
? "Less than or Equal:", oString <= "Hello"
? "Greater than :", oString > "Hello"
? "Greater than or Equal:", oString >= "Hello"
? "Concatenation + :", oString + "Hello"
? "Concatenation - :", oString - "Hello"
? "Array index[2] :", oString[ 2 ]
? "Array index[3] := 'X' :", oString[ 3 ] := 'X'
? oString:cValue
RETURN
CREATE CLASS TString
VAR cValue
METHOD New( cText ) INLINE ::cValue := cText, Self
OPERATOR "=" ARG cArg INLINE ::cValue = cArg
OPERATOR "==" ARG cArg INLINE ::cValue == cArg
OPERATOR "!=" ARG cArg INLINE ::cValue != cArg
OPERATOR "<" ARG cArg INLINE ::cValue < cArg
OPERATOR "<=" ARG cArg INLINE ::cValue <= cArg
OPERATOR ">" ARG cArg INLINE ::cValue > cArg
OPERATOR ">=" ARG cArg INLINE ::cValue >= cArg
OPERATOR "+" ARG cArg INLINE ::cValue + cArg
OPERATOR "-" ARG cArg INLINE ::cValue - cArg
OPERATOR "$" ARG cArg INLINE ::cValue $ cArg
OPERATOR "[]" ARG nIndex INLINE iif( PCount() > 2, ;
::cValue := Stuff( ::cValue, nIndex, 1, hb_PValue( 3 ) ), ;
SubStr( ::cValue, nIndex, 1 ) )
ENDCLASS