Quelqu'un pourrait t'il m'expliquer la différence entre virtual et abstract.
Si possible avec un bout de code.
Merci beaucoup
Quelqu'un pourrait t'il m'expliquer la différence entre virtual et abstract.
Si possible avec un bout de code.
Merci beaucoup
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 :
La procedure ecrire est abstract car on n'a aucune idée, au niveau de TFichier, de comment on fait pour écrire.
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;
Il sera intéressant dans le code de faire des choses genre :
Ainsi, on utilise le même code pour générer du excel et du html.
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;
Bloon
Merci beaucoup tu as très bien répondu.
@+
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager