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

Lazarus Pascal Discussion :

Définir des opérateurs avec un type Object


Sujet :

Lazarus Pascal

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 66
    Par défaut Définir des opérateurs avec un type Object
    Bonjour,

    J'ai compris que je ne pouvais pas redéfinir les opérateurs pour une classe, mais seulement pour des records. Cela a cause du fait que les objets instanciés par les classes sont références dans le heap et non dans le stack. Ils sont donc accessibles par pointeur et ce serait un problème pour la définition des opérateurs.

    Mais qu'en est-il pour des définitions d'objets, qui sont des sortes de records augmentés ? Je parle d'un objet déclaré de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    type
    MyObject = Object
      ...
    end;
    Avec une défection operator dans la déclaration de l'objet sinon en dehors dans la seule partie implementation de l'unité.

    Merci pour votre réponse !

  2. #2
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par gelinp Voir le message
    Mais qu'en est-il pour des définitions d'objets, qui sont des sortes de records augmentés ? Je parle d'un objet déclaré de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    type
    MyObject = Object
      ...
    end;
    Bonjour,

    Je crois (à vérifier) que seuls les enregistrements permettent cette opération. Cependant, les enregistrements peuvent être étendus et donc très proches des objets : pas de polymorphisme et d'héritage, mais une encapsulation. De toute façon, la redéfinition d'opérateurs n'est qu'une technique d'écriture puissante, mais toujours contournable (dixit la documentation de Free Pascal). Voir à ce propos la nouvelle documentation (en anglais) de Free Pascal ici. [Attention : la version PDF n'est pas à jour - de même, les liens depuis Lazarus ont 7 ans de retard ]

    Avec une défection operator dans la déclaration de l'objet sinon en dehors dans la seule partie implementation de l'unité.
    Peux-tu préciser/ reformuler ? Je ne comprends pas

    A bientôt,

    Gilles

    PS : je vais tester le tout d'ici peu.
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 66
    Par défaut
    Oups.... Le clavier à merdé :-) Je voulais dire avec une déclaration operator définissant l'opérateur dans dans le type objet, et celui-ci aurait donc un opérande implicite représenté par l'intance de l'objet auquel il appartient, sinon avec une fonction operator déclarée en dehors du type objet, mais dans l'unité de l'objet, et qui aurait donc 2 opérandes (2 variables en entrée de type constante).

  4. #4
    Rédacteur

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Billets dans le blog
    84
    Par défaut
    Je confirme que operator redéfinissant un opérateur n'est pas applicable à une classe (class) ou à un objet (object).

    Pour une meilleure connaissance des possibilités, je suggère de s'intéresser aux unités de FPC qui emploient la technique de surcharge des opérateurs.
    Voici par exemple le début du code source de l'unité ucomplex.pp qui utilise largement la surcharge d'opérateurs :

    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
    type complex = record
                         re : real;
                         im : real;
                       end;
     
        pcomplex = ^complex;
     
        const i : complex = (re : 0.0; im : 1.0);
              _0 : complex = (re : 0.0; im : 0.0);
     
     
        { assignment overloading is also used in type conversions
          (beware also in implicit type conversions)
          after this operator any real can be passed to a function
          as a complex arg !! }
     
        operator := (r : real) z : complex;
        {$ifdef TEST_INLINE}
        inline;
        {$endif TEST_INLINE}
    Une autre unité encore plus intéressante serait matrix.pp puisqu'elle utilise de très nombreuses surcharges d'opérateurs avec des object afin de simplifier bon nombre d'opérations sur les matrices.
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

Discussions similaires

  1. [2008R2] Problématique des deadlocks avec deux types d’isolation(Etude))
    Par zoltix dans le forum Développement
    Réponses: 9
    Dernier message: 05/12/2013, 12h19
  2. Comment définir des eventid avec EventLogAppender de log4net
    Par Kornoman dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 30/03/2011, 10h32
  3. des soucis avec le type "list"
    Par yuriyan dans le forum C#
    Réponses: 6
    Dernier message: 14/10/2010, 16h18
  4. Réponses: 6
    Dernier message: 25/06/2008, 09h57
  5. Réponses: 3
    Dernier message: 12/12/2007, 11h39

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