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 4 von 9

Mit dem BefehlsreferenzeintragType ist es natürlich nicht getan, jetzt fehlen noch die Inhalte der Funktionen und anderen Member:

Constructor eigentlich_ein_string
    'Startwert des einfachen Constructors ist ein Leerstring
    this.daten = ""
End Constructor

Constructor eigentlich_ein_string (x As Integer)
    'Startwert ist der Übergabewert als String
    this.daten = Str(x)
End Constructor

Constructor eigentlich_ein_string (x As Double)
    'Startwert ist der Übergabewert als String
    this.daten = Str(x)
End Constructor

Constructor eigentlich_ein_string (x As String)
    'Startwert ist der Übergabestring
    this.daten = x
End Constructor

Constructor eigentlich_ein_string (x As eigentlich_ein_string)
    'Startwert ist der Inhalt des Types
    this.daten = x.daten
End Constructor

Destructor eigentlich_ein_string
    'Den Destructor brauchen wir nicht explizit, da kein Speicher belegt wird, den man per Hand freigeben müsste
End Destructor

'###############################################################

Function eigentlich_ein_string.gibZahl (x As Integer) As Integer
    'Inhalt als Integer zurückgeben
    Return ValInt(this.daten)
End Function

Function eigentlich_ein_string.gibZahl (x As Double) As Double
    'Inhalt als Double zurückgeben
    Return Val(this.daten)
End Function

'###############################################################

Property eigentlich_ein_string.proGib As Double
    'Inhalt als Double zurückgeben
    Return Val(this.daten)
End Property

Property eigentlich_ein_string.proGib (x As Double)
    'Übergabewert als String speichern
    this.daten = Str(x)
End Property

'###############################################################

Operator eigentlich_ein_string.Cast As Integer
    'Es wird ein Integer verlangt, also muss mit ValInt umgewandelt werden
    Return ValInt(this.daten)
End Operator

Operator eigentlich_ein_string.Cast As Double
    'Es wird ein Double verlangt, also muss mit Val umgewandelt werden
    Return Val(this.daten)
End Operator

Operator eigentlich_ein_string.Cast As String
    'Es wird ein String verlangt, direkte Rückgabe ist möglich
    Return this.daten
End Operator

'###############################################################

Operator eigentlich_ein_string.+= (x As Integer)
    'Inhalt wird um x erhöht
    this.daten = Str(ValInt(this.daten) + x)
End Operator

Operator eigentlich_ein_string.+= (x As Double)
    'Inhalt wird um x erhöht
    this.daten = Str(Val(this.daten) + x)
End Operator

'###############################################################

Operator eigentlich_ein_string.Let (x As Integer)
    'Übergabewert wird als String gespeichert
    this.daten = Str(x)
End Operator

Operator eigentlich_ein_string.Let (x As Double)
    'Übergabewert wird als String gespeichert
    this.daten = Str(x)
End Operator

Operator eigentlich_ein_string.Let (x As String)
    'Übergabewert wird als String gespeichert
    this.daten = x
End Operator

Operator eigentlich_ein_string.Let (x As eigentlich_ein_string)
    'Übergabewert wird direkt gespeichert
    this.daten = x.daten
End Operator

'###############################################################

Operator eigentlich_ein_string.For
    'For mit Variable, die vorher deklariert wurde
End Operator

Operator eigentlich_ein_string.Step
    'Einfacher Step = Erhöhung um 1 in jedem Zyklus
    this.daten = Str(ValInt(this.daten) + 1)
End Operator

Operator eigentlich_ein_string.Next (x As eigentlich_ein_string) As Integer
    'Next bei Schleife ohne Angabe von Step
    Return ValInt(this.daten) <= ValInt(x.daten)
End Operator

Operator eigentlich_ein_string.For (x As eigentlich_ein_string)
    'For mit Variable, die direkt in der Anweisung deklariert wird
End Operator

Operator eigentlich_ein_string.Step (x As eigentlich_ein_string)
    'Direkte Angabe von Step mit userdefiniertem Wert
    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
    'Next bei Schleife mit Angabe von Step - es muss überprüft werden, ob rauf- (Step 1) oder runtergezählt (Step -1) wird
    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
    '@ soll die Adresse des ZStrings im FBString zurückgeben
    Return StrPtr(this.daten)
End Operator

Im Grunde sind die meisten Member dazu da, den gespeicherten Typ in der richtigen Form auszugeben oder übergebene Parameter in der richtigen Form abzuspeichern. Dazu wird meist nur Befehlsreferenzeintraggecastet, bzw. cast-verwandte Befehle wie BefehlsreferenzeintragStr verwendet.

 

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