OPERATOR

FreeBASIC-Referenz » Alphabetische Befehlsreferenz » O » OPERATOR

Syntax A:

{ TYPE | CLASS | UNION } Typenname
  ' Typdeklarationen
  DECLARE [STATIC] OPERATOR Operatorname ([Parameterliste]) [AS Datentyp]
END { TYPE | CLASS | UNION }

Syntax B:

[STATIC] OPERATOR Typename.Operatorname ([Parameterliste]) [AS Datentyp]

Typ: Prozedur
Kategorie: Operatoren

OPERATOR deklariert oder definiert einen überladenen Operator. Der Befehl kann im Zusammenhang mit TYPE, CLASS, UNION und (mit Einschränkungen) ENUM eingesetzt werden.

Als 'Operatorname' sind folgende Operatoren erlaubt:

Zuweisung:unärer Operator:binärer Operator:Iterator:
  • LET
  • +=
  • -=
  • *=
  • &=
  • /=
  • \=
  • MOD=  
  • SHL=
  • SHR=
  • AND=
  • OR=
  • XOR=
  • IMP=
  • EQV=
  • ^=
  • + (Addition)
  • - (Subtraktion)
  • * (Multiplikation)
  • & (Stringverknüpfung)
  • / (Division)
  • \ (Integerdivision)
  • MOD
  • SHL
  • SHR
  • AND
  • OR
  • XOR
  • IMP
  • EQV
  • ^ (Exponent)
  • = (Vergleich)
  • <>
  • <
  • >
  • <=
  • >=

Eine Überladung der unären Operatoren zur Pointer-Dereferenzierung * und der Pointer-Referenzierung -> arbeitet zur Zeit nicht korrekt.

Hinweis: LET verweist auf den Zuweisungsoperator wie in LET a=b (das Schlüsselwort LET wird im üblichen Gebrauch weggelassen)

Ein Beispiel zur Überladung von Iteratoren wird in diesem Tutorial behandelt.

Beschreibung:
Mit OPERATOR kann festgelegt werden, wie die oben genannten Operatoren arbeiten sollen, wenn mindestens eines der Argumente dem Datentyp des TYPE-, CLASS-, ENUM- oder UNION-Blocks entspricht.

Operatoren sind Funktionen. Der Operator '+' arbeitet wie
FUNCTION plus(a AS datentyp, b AS datentyp) AS datentyp
Operatoren können überladen werden, um verschiedene Datentypen als Parameter zu akzeptieren. Nur der CAST-Operator kann auch dazu überladen werden, um verschiedene Datentypen zurückzugeben.

Manche Operatoren werden innerhalb des Typs oder der Klasse deklariert, manche außerhalb. Dabei gilt:

Sämtliche Definitionen der Operatoren stehen außerhalb der TYPE- bzw. CLASS-Definition.

Da innerhalb eines ENUM keine Deklarationen stehen dürfen, ist hier auch nur die Überladung von unären und binären Operatoren möglich.

Beispiel:

TYPE Vector
  AS SINGLE x, y
  ' gibt einen String zurück, der die Vektordaten enthält.
  DECLARE OPERATOR CAST AS STRING
End Type

' erlaubt die Addition zweier Vektoren
DECLARE OPERATOR + (v1 AS Vector, v2 AS Vector) AS Vector

OPERATOR Vector.CAST () AS STRING
  RETURN "(" + STR(x) + ", " + STR(y) + ")"
END OPERATOR

OPERATOR + (v1 AS Vector, v2 AS Vector) AS Vector
  RETURN TYPE<Vector>( v1.x + v2.x, v1.y + v2.y )
END OPERATOR

DIM a AS Vector = TYPE<Vector>( 1.2, 3.4 )
DIM b AS Vector = TYPE<Vector>( 8.9, 6.7 )

PRINT "a = "; a
PRINT "b = "; b
PRINT "a + b = "; a + b
SLEEP

Unterschiede zu QB: neu in FreeBASIC

Unterschiede zu früheren Versionen von FreeBASIC:

Siehe auch:
TYPE (UDT), UNION, Ausdrücke und Operatoren, Objektorientierung