Referenz - 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.
- 'Typenname' gibt den Namen von TYPE, CLASS, UNION oder ENUM an.
- 'Operatorname' ist eine Zuweisung, ein Iterator oder ein unärer oder binärer Operator.
Als 'Operatorname' sind folgende Operatoren erlaubt:
Zuweisung: | unärer Operator: | binärer Operator: | Iterator: |
|
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:
- Zuweisungen und Iteratoren müssen innerhalb von TYPE oder CLASS (usw.) deklariert werden.
- NEW, DELETE, @ und CAST müssen ebenfalls innerhalb von TYPE oder CLASS deklariert werden. Bei NEW und @ ist der Rückgabewert ein Pointer. DELETE besitzt keinen Rückgabewert. CAST kann mehrmals mit verschiedenen Rückgabewerten definiert sein, darf jedoch nicht den Datentyp des TYPE bzw. CLASS zurückgeben.
- Unäre und binäre Operatoren (außer @ und CAST) müssen außerhalb von TYPE oder CLASS deklariert werden. Ihr Rückgabewert wird explizit angegeben. Sie können jeden erlaubten Datentyp zurückgeben, außer -> (Zeiger auf Element-Zugriff), das den Datentyp von TYPE bzw. CLASS zurückgeben muss. Vergleichsoperatoren können nur dann sinnvoll eingesetzt werden, wenn der Rückgabewert als Zahl interpretiert werden kann.
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:
- Der Operator LEN und der Indexoperator [] sind seit FreeBASIC v1.00.0 überladbar.
- Die Operatoren EXP, LOG, SIN, ASIN, COS, ACOS, TAN und ATN sind seit FreeBASIC v0.22.0 überladbar.
- OPERATOR existiert seit FreeBASIC v0.17.
Siehe auch:
TYPE (UDT), UNION, Ausdrücke und Operatoren, Objektorientierung
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|