Tutorial
Überladen von Prozeduren und Operatoren (Overload)
von MOD | Seite 1 von 9 |
Was ist "OverLoad"?
OverLoad bedeutet Überladen und wird eben dazu verwendet. Mit OverLoad kann man Funktionen in FreeBASIC überladen. Jetzt werden sich einige fragen was es wohl bedeutet, eine Funktion zu überladen.
Nun, das ist eigentlich recht simpel und vermutlich am einfachsten an einem Beispiel erklärt.
Mal angenommen, wir haben eine Funktion, die uns zwei Zahlen addieren soll, eine Funktion wie sie in jedem simplen Taschenrechner vorkommen kann:
Declare Function summiere (zahl1 As Integer, zahl2 As Integer) As Integer
Dim As Integer a, b
a = 5
b = 7
Print summiere(a, b)
Sleep
Function summiere (zahl1 As Integer, zahl2 As Integer) As Integer
Return zahl1 + zahl2
End Function
Das funktioniert doch schon sehr gut, doch halt - Problem!
Was passiert, wenn 'a' und 'b' keine Ganzzahlen, sondern Gleitkommazahlen sind?
Declare Function summiere (zahl1 As Integer, zahl2 As Integer) As Integer
Dim As Double a, b
a = 5.9
b = 7.36
Print summiere(a, b)
Sleep
Function summiere (zahl1 As Integer, zahl2 As Integer) As Integer
Return zahl1 + zahl2
End Function
Die Ausgabe ist ja irgendwie falsch, also was tun?
Man könnte es etwa so lösen:
Declare Function summiere_integer (zahl1 As Integer, zahl2 As Integer) As Integer
Declare Function summiere_double (zahl1 As Double, zahl2 As Double) As Double
Dim As Double a, b
a = 5.9
b = 7.36
Print summiere_double(a, b)
Sleep
Function summiere_integer (zahl1 As Integer, zahl2 As Integer) As Integer
Return zahl1 + zahl2
End Function
Function summiere_double (zahl1 As Double, zahl2 As Double) As Double
Return zahl1 + zahl2
End Function
Ja, so geht es, ABER:
Wenn von 'a' und/oder 'b' nicht bekannt ist, was es für Datentypen sind, dann können wir auch nicht die richtige Funktion aufrufen. Hier kommt OverLoad ins Spiel.
Mit OverLoad können wir den gleichen Funktionsnamen für all unsere Funktionen verwenden. So würde unser Beispiel dabei aussehen:
Declare Function summiere OverLoad (zahl1 As Integer, zahl2 As Integer) As Integer
Declare Function summiere (zahl1 As Double, zahl2 As Double) As Double
Dim As Integer a, b
Dim As Double c, d
a = 5
b = 7
c = 5.9
d = 7.36
Print summiere(a, b)
Print summiere(c, d)
Sleep
Function summiere (zahl1 As Integer, zahl2 As Integer) As Integer
Return zahl1 + zahl2
End Function
Function summiere (zahl1 As Double, zahl2 As Double) As Double
Return zahl1 + zahl2
End Function
Beim Überladen von Funktionen muss nur die erste Funktion den Zusatz 'OverLoad' enthalten und damit ist sie für alle anderen Fälle überladen.
Wie man sieht, verwenden wir exakt den gleichen Funktionsnamen für beide Fälle und trotzdem wird die richtige Funktion verwendet. Der Compiler übernimmt die Arbeit des Zuordnens für uns und das erhöht die Flexibilität des Programms, da man sich nicht mehr selbst darum kümmern muss, welche Funktion verwendet werden soll. Auch spart man sich lange Funktionsnamen (z.B.: 'summiere_ulongint').
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|