Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Tutorial

Überladen von Prozeduren und Operatoren (Overload)

von RedakteurMODSeite 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.

 

Gehe zu Seite Gehe zu Seite  1  2  3  4  5  6  7  8  9  
Zusätzliche Informationen und Funktionen
  • Das Tutorial wurde am 03.06.2010 von RedakteurMOD angelegt.
  • Die aktuellste Version wurde am 23.11.2013 von RedakteurMOD gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen