fb:porticula NoPaste
VIRTUAL
Uploader: | nemored |
Datum/Zeit: | 02.12.2012 00:16:51 |
' ### Ausblick auf virtuelle und abstrakte Methoden in FreeBASIC v0.25
' ### Die Beispiele wurden von MOD für den Newsletter 12/2012 erstellt.
' Wird eine Methode als VIRTUAL definiert, so muss auch der Funktionsrumpf
' geschrieben werden. Ein erbender Type kann diese Methode nun überschreiben
' oder die Implementation der Elternklasse behalten. Im Gegensatz zur
' bereits bekannten Überschreibung während der Vererbung wird nicht nur
' die Methode überschrieben. Bei der Erstellung einer Variable des
' Elternobjekts mit dem Constructor der Kindklasse wird die Variable
' behandelt, als sei sie ein Kindobjekt. Dies ist gut am folgenden
' Beispiel gezeigt.
' ACHTUNG: nur mit einer Vorabversion von FreeBASIC 0.25 lauffähig!
Type Tier Extends Object
Declare Function gibLaut() As String
End Type
Function Tier.gibLaut() As String
Return "Ich bin kein spezielles Tier, ich weiß nicht, wie ich Laut gebe."
End Function
Type Hund Extends Tier
Declare Function gibLaut() As String
End Type
Function Hund.gibLaut() As String
Return "Wau!"
End Function
Dim As Tier Ptr bello = New Hund
Print bello->gibLaut()
Sleep
' In diesem Beispiel werden die Klassen Tier und Hund definiert,
' wobei Tier ein undefiniertes Tier ist und Hund von Tier erbt. Die Klasse
' Hund überschreibt dabei die Methode gibLaut(). Obwohl 'bello' als
' neuer Hund ('New Hund') erstellt wird, erzeugt 'bello->gibLaut()'
' die Ausgabe der Klasse Tier, weil die Variable ein Objekt dieses Types ist.
' Hier das gleiche Beispiel mit VIRTUAL:
Type Tier Extends Object
Declare Virtual Function gibLaut() As String
End Type
VIRTUAL Function Tier.gibLaut() As String
Return "Ich bin kein spezielles Tier, ich weiß nicht, wie ich Laut gebe."
End Function
Type Hund Extends Tier
Declare Function gibLaut() As String
End Type
Function Hund.gibLaut() As String
Return "Wau!"
End Function
Dim As Tier Ptr bello = New Hund
Print bello->gibLaut()
Sleep
' Der Code gibt "Wau!" aus. Durch die Zuweisung 'New Hund' wird zur Laufzeit
' entschieden, dass 'bello' zwar ein Objekt von Tier ist, allerdings als
' Hund behandelt werden soll. Hierbei spricht man von Polymorphismus.