Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - OOP Frage
knittel - Sa 23.10.10 11:34
Titel: OOP Frage
Hallo allerseits,
Ich habe ein Überklasse TGameObject die alle Spiel Objekte beinhaltet.
Delphi-Quelltext
1: 2: 3:
| TGameObject = class public procedure DrawUnit (); virtual; abstract; |
Dann gibt es eine weitere Unterkategorie TUnit. Die TUnit, weiß bereits wie sie gezeichnet wird.
Delphi-Quelltext
1: 2: 3:
| TUnit = class (TGameObject) public procedure DrawUnit (); override; |
Allerdings gibt es noch eine Unterklasse TAirUnit, die eine Ausnahme ist und wieder anders gezeichnet werden soll (mit Schatten).
Delphi-Quelltext
1: 2: 3:
| TAirUnit = class (TUnit) public procedure DrawUnit (); override; |
Jetzt meine Frage:
Ist es möglich die procedure in TUnit sowohl virtual zu machen als auch mit override zu versehen?
Es wäre zwar möglich TAirUnit einfach von TGameObject erben zu lassen. Allerdings beinhaltet TAirUnit sehr viele Werte, Funktionen und Procedures die TUnit auch besitzt.
Danke im vorraus.
bummi - Sa 23.10.10 12:57
wieso mit override mach sie doch einfach virtual
knittel - Sa 23.10.10 13:53
bummi hat folgendes geschrieben : |
| wieso mit override mach sie doch einfach virtual |
Meine Frage ist doch, ob ich sie sowohl overriden als auch virtual machen kann.
SvenAbeln - Sa 23.10.10 14:32
knittel hat folgendes geschrieben : |
Meine Frage ist doch, ob ich sie sowohl overriden als auch virtual machen kann. |
Wieso willst du sie denn noch einmal virtual machen? Deine Prozedur ist doch in TGameObject schon virtuell, durch ein override ändert sich das nicht.
delfiphan - Sa 23.10.10 14:38
Ein override ist sozusagen automatisch immer auch ein virtual.
bummi - Sa 23.10.10 14:59
wenn Du sie in Gameobject nur virtual mit einer Dummyimplementierung deklarierst sparst Du Dir die AbstractFehler und implementierst nur wo Du es brauchst.
Zu Deiner ursprünglichen Frage, zumindest unter Delphi 2010 geht es nicht.
jaenicke - Sa 23.10.10 18:01
knittel hat folgendes geschrieben : |
| Meine Frage ist doch, ob ich sie sowohl overriden als auch virtual machen kann. |
Nein, die Frage ist wieso du meinst sie wäre nicht mehr virtuell.
Was funktioniert denn nicht? So wie du es oben hast, sieht doch alles richtig aus.
knittel - So 24.10.10 09:25
Erstmal Danke an alle die geschrieben haben.
Ich wusste nur nicht das ein override auch automatisch virtual ist. Und ich war mir nicht sicher ob das so wie ich das hatte das auch korrekt funktionieren wird. Deswegen habe ich nachgefragt.
jaenicke - So 24.10.10 10:50
Das Schlüsselwort bewirkt, dass die Methode in der Virtual Method Table landet, wo diese dann überschrieben werden kann. Dort steht dann die aktuell aufzurufende Methode drin.
Wenn die Methode einmal dort steht, dann kann die auch nicht durch ein Überschreiben wieder dort verschwinden, denn genau dieses Überschreiben passiert dort.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!