Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1980 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Class en delphi

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Class en delphi

n°486058
Yana
Posté le 13-08-2003 à 15:52:04  profilanswer
 

'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
mood
Publicité
Posté le 13-08-2003 à 15:52:04  profilanswer
 

n°486065
Poipoi
Vive Grumly
Posté le 13-08-2003 à 15:57:07  profilanswer
 

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:
n°486067
Yana
Posté le 13-08-2003 à 15:58:08  profilanswer
 

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 ...

n°486123
antp
Super Administrateur
Champion des excuses bidons
Posté le 13-08-2003 à 16:35:22  profilanswer
 

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
n°486285
Yana
Posté le 13-08-2003 à 20:17:29  profilanswer
 

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 ?

n°486289
antp
Super Administrateur
Champion des excuses bidons
Posté le 13-08-2003 à 20:22:00  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Class en delphi

 

Sujets relatifs
[delphi] longueur du code ... comment vous faites?[Delphi] Récupérer le nom de la base
[DELPHI] Rotation d'une image[Delphi] Problèmes d'interfaces: besoin de testeurs pour KFK
recuperer le jour de la semaine via delphi[Java] Class swing - Coordonnées d'un JButton
Initialisation d'un objet de type TOracleDataSet (Delphi - DOA)[ Delphi ] Vérifier le statut d'une machine et d'un programme serveurs
Shared memory en c++ et delphi :( GlobalAlloc, GlobalLock, etc...[Delphi] Différence class / object
Plus de sujets relatifs à : Class en delphi


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR