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 :

Abstract VS virtual


Sujet :

Langage Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2002
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Abstract VS virtual
    Quelqu'un pourrait t'il m'expliquer la différence entre virtual et abstract.
    Si possible avec un bout de code.

    Merci beaucoup

  2. #2
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Les méthodes virtual sont des méthodes ayant une implémentation dans la classe Ancetre et pouvant être redéfinies, via override, dans les sous-classes.

    Les méthodes virtual abstract sont des méthodes déclarées dans une classe Ancetre mais qui n'y sont pas implémentées. Elles seront redéfinies et implémentées dans les sous-classes.

    La conséquence est qu'on ne peut pas créer d'objet à partir d'une classe ayant une ou des méthodes abstract. Car si une telle méthode était appelée, on aurait le message "Erreur abstraite" (personellement, j'adore l'effet que provoque ce message sur un utilisateur lambda :-)

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    TFichier = class
    public
      procedure ecrire; virtual; abstract;
    end;
     
    TFichierExcel = class(TFichier)
    public
      procedure ecrire; override;
    end;
     
    TFichierHTML = class(TFichier)
    public
      procedure ecrire; override;
    end;
    La procedure ecrire est abstract car on n'a aucune idée, au niveau de TFichier, de comment on fait pour écrire.

    Il sera intéressant dans le code de faire des choses genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var
      f : TFichier;
    begin
      if (utilisateur veut du excel) then
        f := TFichierExcel.Create
      else if (utilisateur veut du html) then
        f := TFichierHTML.Create
      // ... Traitements divers
      f.ecrire;
    end;
    Ainsi, on utilise le même code pour générer du excel et du html.

    Bloon

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2002
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup tu as très bien répondu.

    @+

Discussions similaires

  1. Différence entre virtual et abstract
    Par _LVEB_ dans le forum C#
    Réponses: 8
    Dernier message: 29/09/2015, 17h21
  2. la différence entre 'abstract' et ' virtual'
    Par Medoou dans le forum Débuter
    Réponses: 6
    Dernier message: 04/03/2009, 09h36
  3. Fonction virtual abstract et overload ?
    Par Targan dans le forum Débuter
    Réponses: 7
    Dernier message: 08/02/2008, 17h10
  4. [C#] Différences entre Virtual et Abstract
    Par kunfuka dans le forum C#
    Réponses: 2
    Dernier message: 11/11/2005, 12h14
  5. Virtual-key code
    Par lyrau dans le forum Windows
    Réponses: 2
    Dernier message: 29/03/2003, 19h22

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