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!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

VIRTUAL

Uploader:Redakteurnemored
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.