Einzelnen Beitrag anzeigen

Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Object via Typecast erzeugen

  Alt 31. Aug 2009, 19:31
Du musst bedenken, was der Compiler macht. Wenn du fOwnerClass.Create schreibst, sieht der Compiler, dass fOwnerClass "mindestens" TxObject ist; das Create bezeichnet also den Konstruktor von TxObject. Nur wenn dieser Konstruktor virtuell ist, wird ein virtueller Dispatch angestoßen; ansonsten wird nur der Konstruktor von TxObject aufgerufen. Wenn du erst in einer abgeleiteten Klasse den Konstruktor virtuell machst, hilft dir das nichts mehr.

Um zu deiner Frage zurückzukommen: Wenn deine Klassenreferenz den Typ class of TxDBObject hat, wird nur TxDBObject.Create aufgerufen; wenn es sich jedoch um class of TxObject handelt, wird virtuell dispatcht. Ob ein geerbter Konstruktor aufgerufen wird, richtet sich nach dem Vorkommen der inherited-Klausel.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat