Referenz - Pfeil
Syntax: UDT_Pointer->Feldname
Typ: Operator
Kategorie: Operatoren
Der Pfeil-Operator greift auf ein Element eines Feldes zu, zu dem ein Pointer angegeben wurde.
Der Operator kann mithilfe von OPERATOR überladen werden.
Der Pointer auf das gewünschte Element kann auch mithilfe von OFFSETOF berechnet und anschließend dereferenziert werden. Aufgrund der Pointerarithmetik ist es dabei jedoch notwendig, auf die richtigen Typen zu casten, was diese Methode sehr umständlich macht. Im folgenden Beispiel wird sie zur Demonstration aufgeführt.
Beispiel:
TYPE rect
x AS SHORT
y AS INTEGER
END TYPE
DIM r AS rect
DIM rp AS rect PTR = @r
rp->x = 4
rp->y = 2
' Direkter Zugriff ohne Pointer
PRINT "x = " & r.x & ", y = " & r.y
' Zugriff über den Pfeil-Operator
PRINT "x = " & rp->x & ", y = " & rp->y
' Pointer-Zugriff über OFFSETOF
PRINT "x = " & *Cast(Short Ptr, (Cast(UInteger, rp) + OFFSETOF(rect, x))) & _
", y = " & *Cast(Integer Ptr, (Cast(UInteger, rp) + OFFSETOF(rect, y)))
SLEEP
Wie man sieht, wird tatsächlich die Variable 'r' durch Zugriffe über diesen Operator verändert.
Beispiel zur Operator-Überladung:
Type T Extends Object
Public:
Declare Function memberFunction() As Integer
End Type
Function T.memberFunction() As Integer
Return 15 'irgendeine beispielhafte Rückgabelogik
End Function
Type D
As T Ptr m_ptr
End Type
Operator -> (ByRef d_ As D) ByRef As T
Return *d_.m_ptr
End Operator
Dim As D d_
Print d_->memberFunction()
Sleep
In dem Beispiel wird der Pfeil für die Klasse D so überladen, dass als Rückgabe der innere T Ptr dereferenziert wird. Dabei ist die BYREF Rückgabe entscheidend.
Somit kann direkt auf memberFunction von m_ptr zugegriffen werden.
Unterschiede zu QB: neu in FreeBASIC
Unterschiede zu früheren Versionen von FreeBASIC:
- existiert seit FreeBASIC v0.13
- die gezeigte Form der Überladung ist erst mit BYREF in FreeBASIC v0.90 möglich geworden
Unterschiede unter den FB-Dialektformen:
In der Dialektform -lang qb steht dieser Operator nicht zur Verfügung.
Siehe auch:
TYPE (UDT), TYPE (Funktion), WITH, OFFSETOF, . (Feldzugriff), @ (Adresse von), * (Wert von)
Zusätzliche Informationen und Funktionen | ||||
---|---|---|---|---|
|