Tutorial
Überladen von Prozeduren und Operatoren (Overload)
von MOD | Seite 9 von 9 |
Zum Schluss das gesamte Beispiel:
Type eigentlich_ein_string
daten As String
Declare Constructor
Declare Constructor (x As Integer)
Declare Constructor (x As Double)
Declare Constructor (x As String)
Declare Constructor (x As eigentlich_ein_string)
Declare Destructor
Declare Function gibZahl (x As Integer) As Integer
Declare Function gibZahl (x As Double) As Double
Declare Property proGib As Double
Declare Property proGib (x As Double)
Declare Operator Cast As Integer
Declare Operator Cast As Double
Declare Operator Cast As String
Declare Operator += (x As Integer)
Declare Operator += (x As Double)
Declare Operator Let (x As Integer)
Declare Operator Let (x As Double)
Declare Operator Let (x As String)
Declare Operator Let (x As eigentlich_ein_string)
Declare Operator For
Declare Operator Step
Declare Operator Next (x As eigentlich_ein_string) As Integer
Declare Operator For (x As eigentlich_ein_string)
Declare Operator Step (x As eigentlich_ein_string)
Declare Operator Next (x As eigentlich_ein_string, y As eigentlich_ein_string) As Integer
Declare Operator @ () As ZString Ptr
End Type
'###############################################################
Constructor eigentlich_ein_string
this.daten = ""
End Constructor
Constructor eigentlich_ein_string (x As Integer)
this.daten = Str(x)
End Constructor
Constructor eigentlich_ein_string (x As Double)
this.daten = Str(x)
End Constructor
Constructor eigentlich_ein_string (x As String)
this.daten = x
End Constructor
Constructor eigentlich_ein_string (x As eigentlich_ein_string)
this.daten = x.daten
End Constructor
Destructor eigentlich_ein_string
End Destructor
'###############################################################
Function eigentlich_ein_string.gibZahl (x As Integer) As Integer
Return ValInt(this.daten)
End Function
Function eigentlich_ein_string.gibZahl (x As Double) As Double
Return Val(this.daten)
End Function
'###############################################################
Property eigentlich_ein_string.proGib As Double
Return Val(this.daten)
End Property
Property eigentlich_ein_string.proGib (x As Double)
this.daten = Str(x)
End Property
'###############################################################
Operator eigentlich_ein_string.Cast As Integer
Return ValInt(this.daten)
End Operator
Operator eigentlich_ein_string.Cast As Double
Return Val(this.daten)
End Operator
Operator eigentlich_ein_string.Cast As String
Return this.daten
End Operator
'###############################################################
Operator eigentlich_ein_string.+= (x As Integer)
this.daten = Str(ValInt(this.daten) + x)
End Operator
Operator eigentlich_ein_string.+= (x As Double)
this.daten = Str(Val(this.daten) + x)
End Operator
'###############################################################
Operator eigentlich_ein_string.Let (x As Integer)
this.daten = Str(x)
End Operator
Operator eigentlich_ein_string.Let (x As Double)
this.daten = Str(x)
End Operator
Operator eigentlich_ein_string.Let (x As String)
this.daten = x
End Operator
Operator eigentlich_ein_string.Let (x As eigentlich_ein_string)
this.daten = x.daten
End Operator
'###############################################################
Operator eigentlich_ein_string.For
End Operator
Operator eigentlich_ein_string.Step
this.daten = Str(ValInt(this.daten) + 1)
End Operator
Operator eigentlich_ein_string.Next (x As eigentlich_ein_string) As Integer
Return ValInt(this.daten) <= ValInt(x.daten)
End Operator
Operator eigentlich_ein_string.For (x As eigentlich_ein_string)
End Operator
Operator eigentlich_ein_string.Step (x As eigentlich_ein_string)
this.daten = Str(ValInt(this.daten) + ValInt(x.daten))
End Operator
Operator eigentlich_ein_string.Next (x As eigentlich_ein_string, y As eigentlich_ein_string) As Integer
If ValInt(y.daten) >= 0 Then
Return ValInt(this.daten) <= ValInt(x.daten)
Else
Return ValInt(this.daten) >= ValInt(x.daten)
EndIf
End Operator
'###############################################################
Operator eigentlich_ein_string.@ () As ZString Ptr
Return StrPtr(this.daten)
End Operator
'###############################################################
Dim As eigentlich_ein_string testVar
testVar = 5
For i As eigentlich_ein_string = 1 To 5 Step 1
Print testVar, *Cast(ZString Ptr, @testVar), testVar + i
Next
Sleep
In den Beispielen werden nicht alle angesprochenen Funktionen überladen. Einen recht ausführlichen Code stellt die Umsetzung des Datentyps Variant in FreeBASIC dar.
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|