Buchempfehlung
Windows System Programming
Windows System Programming
Das Kompendium liefert viele interessante Informationen zur Windows-Programmierung auf Englisch. [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 6 von 9

Jetzt können wir uns auch dem Thema der Iteratoren zuwenden.

Iteratoren sind BefehlsreferenzeintragZeiger, auf Objekte einer Liste. BefehlsreferenzeintragFor-Schleifen sind das Paradebeispiel eines Iterators, da dabei eine Liste von Daten eines Datentyps nacheinander durchlaufen werden. FreeBASIC bietet die Möglichkeit, diese zu überladen.
Für BefehlsreferenzeintragFor gibt es mehrere Möglichkeiten der Verwendung:

Dim As Integer i
For i = 1 To 5
    'Anweisungen
Next

For j As Integer = 1 To 5 Step 2
    'Anweisungen
Next

For k As Integer = 5 To 1 Step -1
    'Anweisungen
Next

Der 'For-Operator' hat keine direkte Funktion bei der BefehlsreferenzeintragFor-Schleife, er nimmt höchstens den Variablentyp entgegen und muss auch nur deswegen überladen werden. Beim Überladen gibt es bei allen Iteratoren immer zwei Fälle. Der erste Fall, in dem For und Step keinen Übergabeparameter haben und Next nur einen und der zweite, bei dem For und Step einen Übergabeparameter haben und Next zwei. Das hat etwas mit Step zu tun, aber darauf komme ich gleich zu sprechen. Zunächst einmal die Deklaration von For:

Operator eigentlich_ein_string.For
    'For ohne explizite Angabe von Step
End Operator

Operator eigentlich_ein_string.For (x As eigentlich_ein_string)
    'For mit Angabe von Step
End Operator

Ähnlich sieht die Deklaration bei BefehlsreferenzeintragStep aus. Bei Step wird entschieden, auf welche Deklaration der Iteratoren zugegriffen wird. Wird Step angegeben, wird immer die jeweils zweite Version mit jeweils einem Übergabeparameter verwendet (bzw. bei Next mit zwei), wenn man Step dagegen in der BefehlsreferenzeintragFor-Schleife weglässt, ist der Wert dafür immer '1' und es wird die erste Deklaration ausgewählt, die keine Parameter hat (und bei Next nur einen). Das hat den unschönen Nebeneffekt, dass man für diese Fälle unbedingt den BefehlsreferenzeintragLet-Operator für BefehlsreferenzeintragInteger überladen muss, sodass das Programm weiß, wie die '1' zum eigenen BefehlsreferenzeintragUDT umgesetzt werden muss. Jetzt aber zur Deklaration von Step:

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.Step (x As eigentlich_ein_string)
    'Direkte Angabe von Step mit userdefiniertem Wert
    this.daten = Str(ValInt(this.daten) + ValInt(x.daten))
End Operator

Das eigentliche Zugpferd der For-Schleife ist BefehlsreferenzeintragNext. Es kümmert sich um die Werte, die zwischen dem '=' (Ist gleich) und dem Step stehen. Es müssen wieder zwei Versionen beachtet werden, nämlich die, bei der Step nicht angegeben wird und der Wert damit immer '1' ist und die Version, bei der der Wert von Step mit einbezogen werden muss.

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

Next gibt einen TRUE- oder FALSE-Wert aus, der daraus ermittelt wird, ob der Übergabewert größer oder kleiner dem Variableninhalt ist. Es stellt damit die Abbruchbedingung dar.
Wenn der aktuelle Zählwert größer oder kleiner dem letzten erlaubten Wert ist, dann wird FALSE ausgegeben und die For-Schleife verlassen.

Beispiele für die Verwendung von Iteratoren finden sich auch im "examples/classes/"-Ordner der FreeBASIC-Installation.

 

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