Class en delphi

Class en delphi - Delphi/Pascal - Programmation

Marsh Posté le 13-08-2003 à 15:52:04    

'Lu,
 
J'apprends les classes en delphi et toutes les histoires d'héritage, mais il y a quelque chose que je ne comprends pas trop :
 

Code :
  1. unit Unit1;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, StdCtrls;
  6. type
  7.   TTest = class(TForm)
  8.     Button1: TButton;
  9.     procedure Button1Click(Sender: TObject);
  10.   private
  11.     { Private declarations }
  12.   public
  13.     { Public declarations }
  14.   end;
  15. type
  16.   TBaseClass = class
  17.     X: integer;
  18.     Y: integer;
  19.     function addition: integer;
  20.   end;
  21. type
  22.   TSecondClass = class(TBaseCLass)
  23.     Z: integer;
  24.     function addition: integer;
  25.   end;
  26. var
  27.   Test: TTest;
  28. implementation
  29. {$R *.dfm}
  30. function TBaseCLass.addition: integer;
  31. begin
  32.   result := X + Y;
  33. end;
  34. function TSecondClass.addition: integer;
  35. begin
  36.   result := inherited addition + Z;
  37. end;
  38. procedure TTest.Button1Click(Sender: TObject);
  39. var
  40.   BaseObj: TBaseClass;
  41.   SecondObj: TSecondClass;
  42.   Result1: integer;
  43.   Result2: integer;
  44. begin
  45.   BaseObj := TBaseClass.Create;
  46.   SecondObj := TSecondClass.Create;
  47.   BaseObj.X := 15;
  48.   BaseObj.Y := 15;
  49.   SecondObj.Z := 100;
  50.   Result1 := BaseObj.addition;
  51.   Result2 := SecondObj.addition;
  52.   ShowMessage(IntTOStr(Result1)+' - '+IntToStr(Result2));
  53. end;
  54. end.


 
Result1 me renvoie 30 : normal
Result2 me renvoie 100 : pourquoi ?
 
Pourquoi est-ce que result2 ne me renvoie-t-il pas 130 ? Pcq si j'ai bien compris, SecondObj va hériter de toutes les données de BaseObj ... mais ici il n'hérite pas de X ni de Y  :??:
 
(Meme que j'ai oublié de detruire mes objets mais ca on s'en balance pour le moment  :whistle: )


Message édité par Yana le 13-08-2003 à 15:55:57
Reply

Marsh Posté le 13-08-2003 à 15:52:04   

Reply

Marsh Posté le 13-08-2003 à 15:57:07    

il hérite des membres, des méthodes, etc...
pas des valeurs affectés aux propriété ça n'a rien à voir
 
tu confond classe et instance
 
en gros ta secondclasse hérite de X et Y mais pas des valeurs contenu dedans, elle hérite de l'"architecture"


Message édité par Poipoi le 13-08-2003 à 15:58:18

---------------
Des bons sites pour Delphi? http://forum.hardware.fr/forum2.php3?post=16838&cat=10 -- informaticien -- http://www.z0rglub.com/phpwebgallery/ -- Delphi :love:
Reply

Marsh Posté le 13-08-2003 à 15:58:08    

ok merci,  
 
mais qu'est ce qu'on entend par une "instance de classe" ? c'est aussi qqch que je n'ai jamais vraiment compris ...

Reply

Marsh Posté le 13-08-2003 à 16:35:22    

une classe c'est juste un "squelette", les attribut n'y ont pas de valeurs, ça ne prend pas de place en mémoire
les instances de classes (appelées souvent objets, en POO) c'est ce qui résulte de l'appel au .Create, ça prend de la place en mémoire, ça stocke les valeurs des attributs, etc.
Dans ce cas-ci tu assignes des valeurs au X et Y d'un objet de type "base", mais pas à l'objet de type "second", du coup ses X et Y sont restés à 0


Message édité par antp le 13-08-2003 à 16:36:09

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 13-08-2003 à 20:17:29    

merci pour les réponses !
 
Il me reste encore une petite question à vous poser (pour le moment :D)
 
A quoi ca sert de mettre "virtual", "override", "overload", "reintroduce",... dans les définitions ?

Reply

Marsh Posté le 13-08-2003 à 20:22:00    

virtual = les descendants pourront implémenter une fonction identique, qui sera appelée à la place de celle du parent, même si l'objet est stocké dans une variable du type du parent
 
override = on défini un truc qui était déjà défini par le parent (qui a probablement mis virtual ou override lui aussi)
 
overload = fonction qui a le même nom qu'une autre, mais des paramètres différents
 
reintroduce = overload+override (on écrase la fonction d'un parent, mais en changeant ses paramètres, de manière à ce que la fonction du parent avec anciens params ne soit plus visible)
 
PS: quand je dis fonction ça s'applique aussi aux procédures évidemment


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed