Inherited & sur-sur-classe

Résolu
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 28 juil. 2006 à 14:00
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 31 juil. 2006 à 14:51
salut a tous, un question me turlupine :
est il possible de sauter une classe lors d'un appel inherited?
un exemple sera plus clair: j'ai 3 classes qui contiennent toute les 3 une meme methode, et je voudrais que l'inherited de la dernier appele la 1ere.

    TC1 = class
       function fnc: integer; virtual;
    end;

    TC2 = class(TC1)
       function fnc: integer; override;

    end;

   

    TC3 = class(TC2)

       function fnc: integer; override;


    end;

   function TC1.fnc: integer;

       Result := 1;
    end;

   function TC2.fnc: integer;
       Result := inherited fnc;
       Result := Result + 2;
    end;

   function TC3.fnc: integer;

       Result := inherited fnc;

       Result := Result + 3;

    end;

Le pb, c'est que je veux que la fnc de TC3 herite de TC1, mais il faut aussi que les autres methodes de TC3 heritent elles de TC2 !!!
donc j'ai pense a plusieurs solutions pou implementer TC3.fnc:

   function TC3.fnc: integer;


       Result := inherited TC1.fnc;


       Result := Result + 3;


    end;// compile pas

   function TC3.fnc: integer;



       Result := TC1(self).fnc;



       Result := Result + 3;



    end;// boucle infinie (c'est la methode de TC3 qui est appelée)

J'ai pensé a une autre solution qui serait de faire une classe intermediaire, mais je prefererai faire sans. Un truc du genre

    TC1 = class

       function fnc: integer; virtual;

    end;


    TC23 = class(TC1)
       //ici les fonction de TC2 dont TC3 doit heriter ( pas fnc)
    end;

    TC2 = class(TC23)

       function fnc: integer; override;


    end;


   


    TC3 = class(TC23)


       function fnc: integer; override;



    end;

Voila en gros mon probleme.
Merci de votre aide

6 réponses

ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
28 juil. 2006 à 16:45
Salut,


"Sauter une classe avec inherited" ? Je ne pense pas que cela soit possible. Ceci dit, il y a un moyen très simple de résoudre ton problème en ajoutant une fonction dans TC1.

  TC1 = class
  protected
     function GetValue: integer; // fonction qui va faire le gros du travail
     function fnc: integer; virtual;
  end;


  TC2 = class(TC1)
  protected
     function fnc: integer; override;
  end;


  TC3 = class(TC2)
  protected
     function fnc: integer; override;
  end;

  function TC1.GetValue: integer;
  begin
     Result := 1;
  end;


  function TC1.fnc: integer;
  begin     Result:GetValue;    // 1
  end;


  function TC2.fnc: integer;
  begin     Result :GetValue + 2;    // 3
  end;


  function TC3.fnc: integer;
  begin     Result :GetValue + 3;     // 4
  end;

A +
Thierry
3
Rejoignez-nous