IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Procédure de classe virtual, override.


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Points : 23
    Points
    23
    Par défaut Procédure de classe virtual, override.
    Bonjour, j'ai un petit souci dont je ne sais pas comment me dépétrer.

    J'ai une classe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     TClasse_Parent=Class
     public
      procedure Creer_Branche(); virtual;
     end;
    La fonction Creer_Branche s'appelle de manière récursive. J'ai également une classe enfante qui surchage Creer_Branche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     TClasse_Enfante=Class
     public
      procedure Creer_Branche(); override;
     end;
    Mais qui rappelle l'inherited Creer_Branche ponctuellement. ET c'est là qu'apparait mon souci. L'inherited Creer_Branche, au lieu de s'appeller de manière récursive appelle... la fonction surchargée. Existe-t-il un moyen d'éviter ce genre de comportement ?

    Merci d'avance

  2. #2
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Salut,

    Le comportement est tout à fait normal à mon sens. C'est purement la logique object que la méthode "redescende" et appelle la fonction de l'enfant.
    et faire une fonction récursive sur une méthode héritée.... selon la position du inherited dans les enfants, je pense que c'est difficilement maitrisable

    Par contre, pour palier à ce problème, tu peux faire une 2eme méthode interne et non héritable dans ta classe parent (private même) qui sera récursive et appelée depuis le "Créer_Branche" de ton parent (et donc indirectement de l'enfant aussi via le inherited).

    De cette manière, la récursivité se passera uniquement au niveau de la classe parent.

    du style:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     TClasse_Parent=Class
     private
      procedure Methode_Recursive;
     public
      procedure Creer_Branche; virtual;
     end;
     
     TClasse_Enfant=Class( TClasse_Parent)
     public
      procedure Creer_Branche; override;
     end;
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    procedure TClasse_Parent.Methode_Recursive;
    begin
           // ...
           Methode_Recursive;
           // ...
    end;
     
    procedure TClasse_Parent.Creer_Branche;
    begin
           // ...
           Methode_Recursive 
           // ...
    end;
     
    procedure TClasse_Enfant.Creer_Branche;
    begin
           // ...
           inherited;
           // ...
    end;
    Je sais pas si j'ai répondu à ton problème !
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Merci pour ta réponse.

    En fait, j'ai fait plus simple ^^.

    J'ai renommé la procédure avec un nom différent dans ma classe enfant. Du coup, plus de souci. Il faut juste que je me rappelle au moment où je code quelle fonction appeler suivant ce que je veux.

Discussions similaires

  1. difference entre virtual-override-Dynamic ?
    Par Jcpan dans le forum Débuter
    Réponses: 7
    Dernier message: 07/04/2010, 12h52
  2. Les Classes + virtual +override;
    Par helmis dans le forum Débuter
    Réponses: 3
    Dernier message: 04/05/2008, 20h16
  3. Réponses: 2
    Dernier message: 23/04/2008, 11h00
  4. Réponses: 4
    Dernier message: 19/04/2006, 15h10
  5. [C#] Evenement sur classe virtual
    Par papouAlain dans le forum Windows Forms
    Réponses: 26
    Dernier message: 11/01/2005, 11h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo