| Autor |
Beitrag |
knittel
      
Beiträge: 71
Erhaltene Danke: 2
Win XP, Win7, openSUSE
Delphi 7
|
Verfasst: Sa 23.10.10 11:34
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.
_________________ "Wir können nicht fliehen!" "Wieso nicht?" "Sie haben mir die Schnürsenkel zusammengebunden!" "Die Schweine."
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: Sa 23.10.10 12:57
wieso mit override mach sie doch einfach virtual
|
|
knittel 
      
Beiträge: 71
Erhaltene Danke: 2
Win XP, Win7, openSUSE
Delphi 7
|
Verfasst: 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.
_________________ "Wir können nicht fliehen!" "Wieso nicht?" "Sie haben mir die Schnürsenkel zusammengebunden!" "Die Schweine."
|
|
SvenAbeln
      
Beiträge: 334
Erhaltene Danke: 3
|
Verfasst: 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
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: Sa 23.10.10 14:38
Ein override ist sozusagen automatisch immer auch ein virtual.
|
|
bummi
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 71
Erhaltene Danke: 2
Win XP, Win7, openSUSE
Delphi 7
|
Verfasst: 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.
_________________ "Wir können nicht fliehen!" "Wieso nicht?" "Sie haben mir die Schnürsenkel zusammengebunden!" "Die Schweine."
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
|
|