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

Was ist "OverLoad"?
BefehlsreferenzeintragOverLoad 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 BefehlsreferenzeintragOverLoad 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').

 

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