ABSTRACT

FreeBASIC-Referenz » Alphabetische Befehlsreferenz » A » ABSTRACT

Syntax:

TYPE Typname EXTENDS Elterntyp
  DECLARE ABSTRACT {SUB|FUNCTION|PROPERTY|OPERATOR} ...
END TYPE

Typ: Klausel
Kategorie: Klassen

ABSTRACT ist eine spezielle Form von VIRTUAL. Im Gegensatz zu virtuellen Methoden wird bei abstrakten kein Methodenkörper (body) geschrieben, also der eigentliche Code, der die Methode implementiert. Dadurch können sog. Interfaces erstellt werden, die von erbenden Klassen implementiert werden.
Damit eine abstrakte Methode also aufgerufen werden kann, muss sie durch die erbende Klasse überschrieben und implementiert werden, da es sonst zu einem Programmabsturz kommt.

Konstruktoren können nicht abstrakt sein, da sie auch nicht virtuell sein können. Siehe dazu VIRTUAL. Weiterhin können auch Destruktoren nicht abstrakt sein, da es stets möglich sein muss, den Speicher einer Variablen freizugeben.

Beachte:
In einer mehrstufigen Vererbungshierarchie kann eine überschriebene Methode auf jeder Ebene als abstrakt, virtuell oder normal deklariert werden. Werden die Varianten gemischt, gilt folgende Reihenfolge von oben nach unten in der Hierarchie: Abstrakt -> Virtuell -> Normal.

Beispiel:

Type Hello Extends Object
  Declare Abstract Sub hi
End Type

Type HelloEnglish Extends Hello
  Declare Sub hi
End Type

Type HelloFrench Extends Hello
  Declare Sub hi
End Type

Type HelloGerman Extends Hello
  Declare Sub hi
End Type


Sub HelloEnglish.hi
  Print "Hello!"
End Sub

Sub HelloFrench.hi
    Print "Salut!"
End Sub

Sub HelloGerman.hi
  Print "Hallo!"
End Sub


Randomize

Dim As Hello Ptr h

For i As Integer = 0 To 9
  Select Case Int(Rnd*3) + 1
    Case 1
      h = New HelloFrench
    Case 2
      h = New HelloGerman
    Case Else
      h = New HelloEnglish
  End Select

  h->hi( )
  Delete h
Next

Sleep

Vergleich zu anderen Sprachen:
Abstrakte Methoden werden in C++ als "pure virtual" bezeichnet. Anders als in FreeBASIC erlaubt es C++, dass "pure virtuals" einen Methodenkörper besitzen.

Unterschiede zu QB: neu in FreeBASIC

Unterschiede zu früheren Versionen von FreeBASIC: existiert seit FreeBASIC v0.90.0

Unterschiede unter den FB-Dialektformen: nur in der Dialektform -lang fb verfügbar

Siehe auch:
VIRTUAL, TYPE, EXTENDS, OBJECT, Objektorientierung