Zum Inhalt springen

PureBasic: Vererbung

Aus Wikibooks

Was tut man, wenn man einen Menschen hat, der Kung-Fu kämpfen kann, also etwas tun kann, dass nicht jeder Mensch kann. Jetzt könnte man natürlich eine komplett neue Klasse anlegen, dies ist aber ineffizient. Hier kommt Vererbung ins Spiel. Der Kämpfer hat natürlich noch auch alle Eigenschaften eines normalen Menschens, also ein Alter und einen Namen. Man erstellt nun eine Klasse, die von der ersten erbt.

; Listing 41: Vererbung

Class Mensch
  Mensch(alter.l = 0, name.s = "")
  Release()
  
  set_alter(alter.l)
  get_alter.l()
  set_name(name.s)
  get_name.s()
  
  alter.l
  name.s
EndClass

Procedure Mensch\Mensch(alter.l = 0, name.s = "")
  This\alter = alter
  This\name = name
EndProcedure

Procedure Mensch\set_alter(alter.l)
  This\alter = alter
EndProcedure

Procedure.l Mensch\get_alter()
  ProcedureReturn This\alter
EndProcedure

Procedure Mensch\set_name(name.s)
  This\name = name
EndProcedure

Procedure.s Mensch\get_name()
  ProcedureReturn This\name
EndProcedure

Class Kaempfer Extends Mensch
  Kaempfer()
  Release()
  
  kaempfen()
EndClass

Procedure Kaempfer\Kaempfer()
  This\Base(70, "Bruce")
EndProcedure

Procedure Kaempfer\kaempfen()
  PrintN("Hai Ya!")
EndProcedure

*bruce.Kaempfer = NewObject Kaempfer()

OpenConsole()

PrintN("Name: "+*bruce\get_name())
PrintN("Alter: "+Str(*bruce\get_alter()))
*bruce\kaempfen()

DeleteObject *bruce

Delay(2000)
Ausgabe:

Name: Bruce
Alter: 70
Hai Ya!

Die Vererbung wird durch das Schlüsselwort Extend eingeleitet, hinter das man die Elternklasse schreibt. Die Klassendeklaration funktioniert dann wieder auf die gleiche Weise. Bei der Methodendefinition ist zu beachten, dass der Konstruktor den Konstruktor der Elternklasse aufrufen muss, da diesem Argumente übergeben werden sollen. Wenn der Konstruktor der Elternklasse Argumente ohne Standardwert erwartet, ist dieser Aufruf obligatorisch! Man sieht, dass die Objektinitialisierung ebenfalls gleich ist. Außerdem kann über den Zeiger auch auf die Methoden der Elternklasse zugegriffen werden. Vererbung ist also ein sinnvoller Weg, um viele Code-Zeilen zu sparen.