Autor Beitrag
knittel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 71
Erhaltene Danke: 2

Win XP, Win7, openSUSE
Delphi 7
BeitragVerfasst: Sa 23.10.10 11:34 
Hallo allerseits,
Ich habe ein Überklasse TGameObject die alle Spiel Objekte beinhaltet.
ausblenden Delphi-Quelltext
1:
2:
3:
TGameObject = class
  public
    procedure DrawUnit (); virtualabstract;


Dann gibt es eine weitere Unterkategorie TUnit. Die TUnit, weiß bereits wie sie gezeichnet wird.
ausblenden 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).
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Sa 23.10.10 12:57 
wieso mit override mach sie doch einfach virtual
knittel Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 71
Erhaltene Danke: 2

Win XP, Win7, openSUSE
Delphi 7
BeitragVerfasst: Sa 23.10.10 13:53 
user profile iconbummi hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 334
Erhaltene Danke: 3



BeitragVerfasst: Sa 23.10.10 14:32 
user profile iconknittel hat folgendes geschrieben Zum zitierten Posting springen:

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Sa 23.10.10 14:38 
Ein override ist sozusagen automatisch immer auch ein virtual.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 23.10.10 18:01 
user profile iconknittel hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 71
Erhaltene Danke: 2

Win XP, Win7, openSUSE
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.