Les Snippets

Connexion

Surcharge d'operateur de classe et enregistrements (exemple TSplitedTime)

Niveau requis pour utiliser/comprendre cette source : 3 ( Expert )
Créé le 18/07/2009 01:23:59 et initié par f0xi [Liste]
Vue : 4138
Catégorie(s) : Date & Heure, Trucs & Astuces, Divers, Class
Langages dispo pour ce code :
- Delphi 5



Langage : Delphi 5
Date ajout : 18/07/2009
Posté par f0xi [Liste]
voici un exemple concret de surcharge d'operateur dans un enregistrement (Delphi 2009)
cette surcharge permet :
convertir TDateTime vers TSplitedTime et inversement :
SplitedTime := Now;
DateTime := SplitedTime;
faire des comparaisons sur le type TSplitedTime :
if SplitedTimeA = SplitedTimeB then ...
if SplitedTimeA <> SplitedTimeB then ...
on peut bien sur aller plus loin en surchargeant d'autres operateurs, cela peut s'appliquer egalement aux classes.
on beneficie donc d'enregistrements puissants ne nécessitant plus d'appel a des fonctions de manipulation externe pour les actions les plus basiques.
cette methode tant attendue permet de reduire encore l'ecart entre delphi et c++ ce qui le rend plus RAD que jamais. 

type
  TSplitedTime = record
    {$IF RTLVersion >= 18.0}
    class operator Implicit(a: TSplitedTime): TDateTime;
    class operator Implicit(a: TDateTime): TSplitedTime;
    class operator Equal(a, b: TSplitedTime): Boolean;
    class operator NotEqual(a, b: TSplitedTime): Boolean;
    class operator GreaterThan(a, b: TSplitedTime) : boolean;
    class operator LessThan(a, b: TSplitedTime): Boolean;
    class operator GreaterThanOrEqual(a, b: TSplitedTime) : boolean;
    class operator LessThanOrEqual(a, b: TSplitedTime): Boolean;
    {$IFEND}
    case integer of
      0: (Hours, Minutes, Seconds, MilliSeconds : word);
      1: (HMSZ : UInt64);
  end;
{$IF RTLVersion >= 18.0}
class operator TSplitedTime.Implicit(a: TSplitedTime): TDateTime;
begin
  result := EncodeTime(A.Hours, A.Minutes, A.Seconds, A.MilliSeconds);
end;
class operator TSplitedTime.Implicit(a: TDateTime): TSplitedTime;
begin
  DecodeTime(a, result.Hours, result.Minutes, result.Seconds, result.MilliSeconds);
end;
class operator TSplitedTime.Equal(a, b: TSplitedTime): Boolean;
begin
  result := a.HMSZ = b.HMSZ;
end;
class operator TSplitedTime.NotEqual(a, b: TSplitedTime): Boolean;
begin
  result := a.HMSZ <> b.HMSZ;
end;
class operator TSplitedTime.GreaterThan(a, b: TSplitedTime) : Boolean;
begin
  result := a.HMSZ > b.HMSZ;
end;
class operator TSplitedTime.LessThan(a, b: TSplitedTime): boolean;
begin
  result := a.HMSZ < b.HMSZ;
end;
class operator TSplitedTime.GreaterThanOrEqual(a, b: TSplitedTime) : Boolean;
begin
  result := A.HMSZ >= B.HMSZ;
end;
class operator TSplitedTime.LessThanOrEqual(a, b: TSplitedTime): boolean;
begin
  result := A.HMSZ <= B.HMSZ;
end;
{$IFEND}


Snippets en rapport avec : Classe, Operator, Operateur, Record, Surcharge



Codes sources en rapport avec : Classe, Operator, Operateur, Record, Surcharge

{C / C++ / C++.NET} NOMBRES COMPLEXES - COMPLEX NUMBERS
Nombres complexes et surcharge d'opérateurs. Complex numbers and operator overloading. Exemple s...

{Visual Basic, VB6, VB.NET, VB 2005} STRUCTURE MATRICE : SURCHARGE DES OPÉRATEURS POUR LE CALCUL MATRICIEL, INVERSION TRACE DÉTERMINANT ET AUTRES OPÉRATIONS
Ce code est très largement inspiré de celui de US_30 posté il y a quelques jours ( http://www.vbfran...

{Visual Basic, VB6, VB.NET, VB 2005} CALCUL DE NOMBRES COMPLEXES, À L'AIDE D'UNE STRUCTURE SIMPLE, SURCHARGE DES OPÉRATEURS COURANTS ET CONVERSIONS IMPLICITES
Voici transposé en VB ce qui je suppose existe depuis longtemps dans d'autres langages objets... la ...

{Visual Basic, VB6, VB.NET, VB 2005} SURCHARGE D'OPERATEUR VB5/6
Bonjour voici une source faite en colaboration avec mon ami et grand specialiste Warning. Elle pe...

{Visual Basic, VB6, VB.NET, VB 2005} DÉCLARER UN OPÉRATEUR (EXEMPLE : "+")
Voici un code qui présente rapidement comment déclarer un opérateur pour une classe d'objet "faite m...

{C / C++ / C++.NET} CALCULATRICE COMPLEXE ET FLOTTANTE
Ce code est complet et il marche. C'est une calculatrice complexe avec tableu complex,surcharge des ...

{C# / C#.NET} SURCHARGE D'OPÉRATEURS : TUTORIAL
Voici une petite source montrant comment surcharger un opérateur du type +, *, ... pour par exemple ...

{Visual Basic, VB6, VB.NET, VB 2005} CLASSE D'OBJET DE GÉNÉRATEUR DE MAIL OUTLOOK AVEC MISE EN FORME VIA UNE SYNTAXE HTML
Ayant il y a quelques mois développé le "GÉNÉRATEUR DE MAIL LOTUS NOTES AVEC MISE EN FORME VIA UNE S...

{PHP} TESTS UNITAIRES
Bonjour à tous, Je présente aujourd'hui une version plus aboutie de ce code en ligne depuis peu. ...

{Visual Basic, VB6, VB.NET, VB 2005} LECTURE DES INFORMATIONS DES DISQUES COMPOSANT UN ENSEMBLE RAID
Permet de lire quelques infos issues des données RAID gérées par Intel. A dire vrai, je ne sais pas...