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!

Referenz - IS (Vererbung)

Referenz-Navigation

 

Syntax: Variable IS Klasse
Typ: Operator
Kategorie: Klassen

IS wird in Verbindung mit Vererbung dazu genutzt, um den Typen einer Variable zu prüfen. Der Operator kann nur genutzt werden, wenn die Basis-Klasse von BefehlsreferenzeintragOBJECT erbt und somit die Externer Link!RTTI-Funktionalität zur Verfügung steht.

Der Operator prüft nicht, ob die Variable exakt zur gefragten Klasse gehört. Er liefert vielmehr auch dann ein wahres Ergebnis, wenn die Variablen-Klasse von der angegebenen Klasse erbt. Das bedeutet, dass eine Variable einer Kind-Klasse auch in die Basis-Klasse fällt. Ein Beispiel dazu finden Sie im Artikel zu BefehlsreferenzeintragOBJECT. Wenn Sie die exakte Zugehörigkeit zu einer Klasse prüfen wollen, sollten Sie aus diesem Grund die abgefragten Klassen immer in zur Erbreihenfolge entgegengesetzen Reihenfolge prüfen.

Beispiel 1:

Type Haustier Extends Object
  As Integer beine   = 4
  As Integer schwanz = 1
End Type

Type Hund Extends Haustier
  Declare Sub gibLaut
End Type
Sub Hund.gibLaut
  Print "Wuff!"
End Sub

Type Chihuahua Extends Hund
  Declare Sub gibLaut
End Type
Sub Chihuahua.gibLaut
  Print "Klaeffklaeff!"
End Sub

Dim As Haustier ptr balto = New Hund
If *balto Is Chihuahua Then
  Print "Balto ist sehr klein."
ElseIf *balto Is Hund Then
  Print "Balto ist ein normaler Hund."
Else
  Print "Balto ist ein Haustier."
End If

Delete balto
Sleep

IS arbeitet nur mit der Klasse, die direkt von OBJECT erbt. Andererseits kann diese Klasse natürlich nicht auf die Attribute und Methoden seiner Kindklassen zugreifen; balto.gibLaut ist in oben stehenden Beispiel nicht möglich. Als Lösung kann die Variable entsprechend BefehlsreferenzeintraggeCASTet werden. Damit ist es z. B. auch möglich, an eine Prozedur eine Variable zu übergeben, die je nach zugehöriger Klasse anders behandelt wird.

Beispiel 2:

' ###   Klassendeklarationen   ###
Type Haustier Extends Object
  As Integer beine   = 4
  As Integer schwanz = 1
End Type

Type Hund Extends Haustier
  As Integer anhaenglich = 1
  Declare Sub gibLaut ()
End Type
Sub Hund.gibLaut ()
  Print "Wuff!"
End Sub

Type Katze Extends Haustier
  As Integer verspielt = 1
  Declare Sub gibLaut ()
End Type
Sub Katze.gibLaut ()
  Print "Miau!"
End Sub

' ###   Prozedur zur Behandlung aller Haustier-Klassen   ###
Sub haustiertest(tier As Haustier)
  If tier Is Hund Then
    Print "Dieser Hund hat einen Anhaenglichkeitswert von " & Cast(Hund ptr, @tier)->anhaenglich & "."
    Cast(Hund ptr, @tier)->gibLaut
  Elseif tier Is Katze Then
    ' dasselbe mit temporaerer Variable
    Dim As Katze ptr k = Cast(Katze ptr, @tier)
    Print "Diese Katze hat einen Verspieltheitswert von " & k->verspielt & "."
    k->gibLaut
  Else
    Print "Ueber dieses Tier weiss ich nichts."
  End If
End Sub

' ###   Testaufrufe   ###
Dim mautzi As Katze, balu As Hund
haustiertest(balu)
Print
haustiertest(mautzi)
Sleep

Unterschiede zu QB: neu in FreeBASIC

Unterschiede zu früheren Versionen von FreeBASIC:
IS in Verbindung mit Vererbung existiert seit FreeBASIC v0.24

Siehe auch:
BefehlsreferenzeintragTYPE (UDT), BefehlsreferenzeintragBASE, BefehlsreferenzeintragOBJECT, BefehlsreferenzeintragEXTENDS, BefehlsreferenzeintragObjektorientierung


Zusätzliche Informationen und Funktionen
  • Der Referenzeintrag wurde am 08.01.2012 von RedakteurMOD angelegt.
  • Die aktuellste Version wurde am 05.08.2020 von Redakteurnemored gespeichert.
  Versionen Versionen