Surcharge - Constructeurs [Résolu]

cs_PtitTrain 28 Messages postés mercredi 20 février 2008Date d'inscription 25 juillet 2011 Dernière intervention - 23 juil. 2011 à 07:50 - Dernière réponse : cs_PtitTrain 28 Messages postés mercredi 20 février 2008Date d'inscription 25 juillet 2011 Dernière intervention
- 25 juil. 2011 à 16:13
Bonjour à tous.
Comme le temps de ce mois de juillet incite à méditer sur Delphi plutôt qu'à marcher sous la pluie, une petite question qui m'a toujours intrigué :
Lorsqu'on est amené à surcharger une méthode, on sait qu'il est nécessaire qu'elle ait été déclarée auparavant Virtual dans l'ancêtre.
Comment se fait-il que lorsqu'on fait "constructor Create ... override; ", on n'a pas besoin de cette précaution ?. Est-ce du au fait que dans le lointain TObject, le constructor était déjà virtual ?.. (si oui, où peut-on voir le source ?)
Quelqu'un peut-il m'éclairer ?
Bon été à tous.
JJT
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 25 juil. 2011 à 11:11
3
Merci
Salut,

"Lorsqu'on est amené à surcharger une méthode, on sait qu'il est nécessaire qu'elle ait été déclarée auparavant Virtual dans l'ancêtre. "
- Ou en Dynamic!

"Est-ce du au fait que dans le lointain TObject, le constructor était déjà virtual ?.. (si oui, où peut-on voir le source ?) "
- Oui

Unité classes.pas:
-----------------------
TComponent = class(TPersistent, IInterface, IInterfaceComponentReference)
private
public
constructor Create(AOwner: TComponent); virtual;
destructor Destroy; override;
procedure BeforeDestruction; override;

A+

Composants Cindy pour Delphi

Merci cs_MAURICIO 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de cs_MAURICIO
Meilleure réponse
cs_MAURICIO 2233 Messages postés mardi 10 décembre 2002Date d'inscription 15 décembre 2014 Dernière intervention - 25 juil. 2011 à 11:20
3
Merci
Bonnes vacances et n' oublie pas de valider la réponse! ^^
A+


Composants Cindy pour Delphi

Merci cs_MAURICIO 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de cs_MAURICIO
Meilleure réponse
beckerich 308 Messages postés jeudi 29 septembre 2005Date d'inscription 17 septembre 2013 Dernière intervention - 25 juil. 2011 à 12:58
3
Merci
Bonjour,

si je ne m'abuse, Le constructeur de TObject n'est pas virtual, ni dynamic (voir system.pas)

  TObject = class
    constructor Create;
    procedure Free;
    class function InitInstance(Instance: Pointer): TObject;
    procedure CleanupInstance;
    function ClassType: TClass;
    class function ClassName: ShortString;
    class function ClassNameIs(const Name: string): Boolean;
    class function ClassParent: TClass;
    class function ClassInfo: Pointer;
    class function InstanceSize: Longint;
    class function InheritsFrom(AClass: TClass): Boolean;
    class function MethodAddress(const Name: ShortString): Pointer;
    class function MethodName(Address: Pointer): ShortString;
    function FieldAddress(const Name: ShortString): Pointer;
    function GetInterface(const IID: TGUID; out Obj): Boolean;
    class function GetInterfaceEntry(const IID: TGUID): PInterfaceEntry;
    class function GetInterfaceTable: PInterfaceTable;
    function SafeCallException(ExceptObject: TObject;
      ExceptAddr: Pointer): HResult; virtual;
    procedure AfterConstruction; virtual;
    procedure BeforeDestruction; virtual;
    procedure Dispatch(var Message); virtual;
    procedure DefaultHandler(var Message); virtual;
    class function NewInstance: TObject; virtual;
    procedure FreeInstance; virtual;
    destructor Destroy; virtual;
  end;

constructor TObject.Create;
begin
end;

Merci beckerich 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de beckerich
cs_PtitTrain 28 Messages postés mercredi 20 février 2008Date d'inscription 25 juillet 2011 Dernière intervention - 25 juil. 2011 à 11:18
0
Merci
Tout est clair..
Un grand merci pour ta réponse ! (et bon été)
@+ JJT
Commenter la réponse de cs_PtitTrain
cs_PtitTrain 28 Messages postés mercredi 20 février 2008Date d'inscription 25 juillet 2011 Dernière intervention - 25 juil. 2011 à 16:13
0
Merci
le source que tu cites paraît effectivement clair à ce sujet..
et ce n'est qu'au niveau de TComponent que semble débarquer le virtual (comme le montre Mauricio ci-dessus).
merci pour ton post qui m'éclaicit bien TObject.
@+ JJT
Commenter la réponse de cs_PtitTrain

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.