IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Operator implicit, explicit


Sujet :

Langage Delphi

  1. #1
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 105
    Points : 235
    Points
    235
    Par défaut Operator implicit, explicit
    Bonjour à tous,
    Qui peut m'expliquer ce que signifient les class opérator implicit et explicit.
    Je crée des "class operator" sur des records, plus pour le fun et piger le concept car avec des proc et des functions on y arrive. Tout va bien pour tous les opérateurs (add, substract, trunc, ...) sauf les 2 premiers. Je ne pige pas ce que signifient les operateurs implicit et explicit. S'agit-il d'une affectation entre la variable passé en param et le records possèdant l'opérateur ?

    MyRec := MyVar serait l'opérateur de implicit et
    MyVar := MyRec serait l'opérateur explicit
    (ou l'inverse) ?

    Comme d'hab, d'avance merci.
    solilog

  2. #2
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Bonjour,

    un petit exemple pour mieux comprendre ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    unit ClassOperator;
     
    interface
    uses SysUtils;
    type
      TMyRecord = record
        Data: string;
        class operator Implicit(a: Integer): TMyRecord;
        class operator Explicit(a: Integer): TMyRecord;
        class operator Implicit(a: TMyRecord): Integer;
        class operator Explicit(a: TMyRecord): Integer;
      end;
    implementation
     
    { TMyRecord }
     
    class operator TMyRecord.Explicit(a: Integer): TMyRecord;
    begin
      Result := A; // fait Appel à Implicite;
    end;
     
    class operator TMyRecord.Implicit(a: Integer): TMyRecord;
    begin
      Result.Data := a.ToString;
    end;
     
    class operator TMyRecord.Explicit(a: TMyRecord): Integer;
    begin
      Result := A  // fait Appel à Implicite;
    end;
     
    class operator TMyRecord.Implicit(a: TMyRecord): Integer;
    begin
      Result := A.Data.ToInteger;
    end;
     
    end.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ...
    uses ClassOperator;
    ...
    procedure TForm1.Button1Click(Sender: TObject);
    var
      MyRec: TMyRecord;
      b: Integer;
    begin
      B := 255;
     
      MyRec := TMyRecord(b);  // fait appel à explicit
      b := Integer(MyRec);    // fait appel à explicit
      MyRec:= B;              // fait appel à implicit
      B := MyRec;             // fait appel à implicit
    end;
    ceci devrait suffire à comprendre le principe

    Cordialement,

    @+

  3. #3
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 105
    Points : 235
    Points
    235
    Par défaut
    Merci Cirec,
    Je pensais bien que était une affectation, mais pas encore limpide.
    Donc implicit est utilisé quand le type param de la fonction est <> et elle retourne une valeur du mm type que le record
    et explicit quand il est du même type et retourne un type <> ?
    (merci de confirmer).
    Désolé d'être lourd :-)
    soliog

  4. #4
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Extrait de la page http://docwiki.embarcadero.com/RADSt...teurs_(Delphi)

    Implicit
    Conversion
    Implicit(a : type) : resultType;
    transtypage implicite

    Explicit
    Conversion
    Explicit(a: type) : resultType;
    transtypage explicite
    Comme indiqué dans l'exemple de @Cirec, les opérateurs explicites sont appelés lorsqu'il y a transtypage ou spécification du type de la variable affectée.
    Sans spécification du type c'est l'opérateur implicite qui est pris en compte.

  5. #5
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Décembre 2014
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Décembre 2014
    Messages : 105
    Points : 235
    Points
    235
    Par défaut
    C'est clair, merci à Cirec et Patrick.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Variables de context implicite/explicite
    Par pkp85pkp dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 20/11/2014, 15h56
  2. Réponses: 3
    Dernier message: 20/09/2008, 14h48
  3. Réponses: 12
    Dernier message: 12/07/2007, 14h17
  4. Réponses: 2
    Dernier message: 26/04/2006, 12h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo