Surcharge - Constructeurs [Résolu]

Messages postés
28
Date d'inscription
mercredi 20 février 2008
Dernière intervention
25 juillet 2011
- - Dernière réponse : cs_PtitTrain
Messages postés
28
Date d'inscription
mercredi 20 février 2008
Dernière intervention
25 juillet 2011
- 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
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Dernière intervention
15 décembre 2014
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

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de cs_MAURICIO
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Dernière intervention
15 décembre 2014
3
Merci
Bonnes vacances et n' oublie pas de valider la réponse! ^^
A+


Composants Cindy pour Delphi

Merci cs_MAURICIO 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de cs_MAURICIO
Messages postés
308
Date d'inscription
jeudi 29 septembre 2005
Dernière intervention
17 septembre 2013
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

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de beckerich
Messages postés
28
Date d'inscription
mercredi 20 février 2008
Dernière intervention
25 juillet 2011
0
Merci
Tout est clair..
Un grand merci pour ta réponse ! (et bon été)
@+ JJT
Commenter la réponse de cs_PtitTrain
Messages postés
28
Date d'inscription
mercredi 20 février 2008
Dernière intervention
25 juillet 2011
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.