Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
prog:lazarus:classes:creation_class [06/05/2020 16:14]
thierry [Sources et Ressources]
prog:lazarus:classes:creation_class [17/06/2023 17:11] (Version actuelle)
thierry [inline]
Ligne 1: Ligne 1:
 ====== Création d'une Class ou d'un Object ====== ====== Création d'une Class ou d'un Object ======
 +===== Déclaration d'une class =====
 +<code delphi>
 +type
 +  TMyClass = class(TObject) ​ // TMyClass hérite de TObject
 +  private
 +    FSomeVar: integer;
 +  public
 +    constructor Create; overload; // overload = plusieurs définition de la même procédure sont disponibles
 +    constructor Create(Args:​ array of integer); overload;
 +    destructor Destroy; override; // override = redefini la méthode virtual du parent.
 +    procedure DoSomethingLater;​ virtual; abstract; // Cette méthode n'​existe pas ici, elle devra être implémentée dans les enfants de cette class
 +    procedure DoEvent; virtual;
 +    function GetSomeVar: integer;
 +    procedure SetSomeVar(newvalue:​ integer);
 +  published
 +    property SomeVar: integer read GetSomeVar write SetSomeVar default 0;
 +  end;
 +  </​code>​
 +
 ===== Les modificateurs ===== ===== Les modificateurs =====
 === virtual === === virtual ===
Ligne 30: Ligne 49:
 Ceci est également vrai pour les méthodes ''​dynamic''​.\\ Ceci est également vrai pour les méthodes ''​dynamic''​.\\
 Cependant, vous ne pouvez pas remplacer une méthode si elle n'est pas ''​virtual''​ ou ''​dynamic''​. Cependant, vous ne pouvez pas remplacer une méthode si elle n'est pas ''​virtual''​ ou ''​dynamic''​.
 +
 +''​override''​ peut résoudre l'​erreur suivante :
 +<note warning>​Warning:​ An inherited method is hidden by "​xxxxx;"</​note>​
 +Mais si aprés avoir mis ''​override''​ on obtient a nouveau l'​erreur :
 +<​note ​ warning>​Error:​ There is no method in an ancestor class to be overridden: "​xxxxx;"</​note>​
 +Il faut essayer ''​reintroduce''​
 === abstract === === abstract ===
 Une méthode ''​abstract''​ est déclarée, mais non implémentée dans la classe de base.  Une méthode ''​abstract''​ est déclarée, mais non implémentée dans la classe de base. 
 +
 +Seule les membres ''​virtual''​ peuvent être ''​abstract''​.
 +<code delphi>
 +procedure test; virtual; abstract;
 +</​code>​
  
 Les classes dérivées seront obligées de fournir leur propre implémentation. Les classes dérivées seront obligées de fournir leur propre implémentation.
Ligne 74: Ligne 104:
 end; end;
 </​code>​ </​code>​
 +===  stdcall ===
 +<​note>​ToDo</​note>​
 +=== inline ===
 +
 +Le mot réservé inline permet au compilateur de copier une fonction ou une procédure à la place de son appel.
 +
 +Si la fonction ou la procédure inline est utilisée fréquemment,​ cela augmente la vitesse du programme puisque le programme n'a pas besoin de passer à la sous-routine.
 +
 +L'​utilisation des fonctions et procédures inline est désactivée par défaut. Le commutateur du compilateur -Si ou {$inline on} active l'​utilisation des fonctions et procédures inline.
 +
 +
 +inline est une indication du compilateur et le compilateur peut l'​ignorer.\\
 +Si le compilateur vous avertit qu'il n'a pas mis en ligne une certaine partie de code marquée comme inline, vous devez supprimer la directive inline.\\
 +Il ne s'agit pas d'un bogue. Il s'agit de la complexité du code
 +
 +=== Absolute ===
 +Source : [[https://​wiki.freepascal.org/​Absolute]]
 +Le modificateur ''​absolute''​ entraîne le stockage d'une variable au même emplacement de mémoire qu'une autre variable.
 +
 +
 +===== Voir aussi =====
 +  * [[prog:​lazarus:​classes:​manip_class]]
 ===== Sources et Ressources ===== ===== Sources et Ressources =====
   * [[https://​wiki.freepascal.org/​Class]]   * [[https://​wiki.freepascal.org/​Class]]