Si j'ai une classe enfant, la classe enfant hérite de toutes les méthodes du parent, mais comment utiliser les fonctions de la classe enfant dans la classe parente? Est-ce cela que l'abstraction est? Comment l'accomplir?Abstraction dans Delphi
Mon code:
type
cParent = class(TObject)
private
function ParentFunction:byte;
function ChildFunction:byte;virtual;abstract;
end;
type
cChild = class(cParent)
private function ChildFunction:byte;override;
end;
function cChild.ChildFunction:byte;
begin
Exit(20);
end;
function cParent.ParentFunction:byte;
begin
Exit(10);
end;
var
c:cParent;
begin
c:= cParent.Create;
WriteLn(c.ChildFunction);
Readln;
end.
Il compile le fichier, mais je reçois exception d'abstraction.
Quand vous dites qu'il se compile bien, voulez-vous vraiment dire que vous n'avez * pas * reçu d'avertissement du compilateur vous disant que vous instanciez une classe abstraite? Vous devez être plus diligent à propos de l'éradication des astuces et des avertissements du compilateur, pas seulement des erreurs. –
Juste quelques commentaires concernant le style conventionnel. Il est habituel dans Delphi de préfixer les noms de classe (et autres types) avec T, pas c. La valeur de retour des fonctions est généralement définie en définissant la variable Résultat implicite sur une valeur, plutôt que d'utiliser Quitter, par exemple Résultat: = 10 ;, pas Quitter (10) ;. La syntaxe Exit n'a été ajoutée que dans D2009 Remarque: Vous pouvez également utiliser le nom de la fonction plutôt que le résultat (ParentFunction: = 10;) - l'effet est le même et c'est la syntaxe Pascal originale –