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

C++ Discussion :

question redefinition "operator ="


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Par défaut question redefinition "operator ="
    Bonjour,

    Si on définit une classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class nouveau_type
    {
      private:
          int m_valeur;
      public:
       nouveau_type& operator=(nouveau_type const &val)
      {
        this->m_valeur=val;
        return(*this);
      }
    };
    Avec la redéfinition de l'opérateur= comme précédent, il est donc possible d'effectuer l'opération suivante:

    nouveau_type A = 7; //équivalent a A.m_valeur = 7;

    J'en arrive donc a ma question===>
    est il possible de faire l'inverse?

    cad redéfinir l'opérateur= "standard"(agissant sur les types int/float/short/etc)...de telle sorte que le compilateur comprenne que

    (int = nouveau_type) est équivalent à (int = nouveau_type.m_valeur)

    (je pense à une redéfinition comme pour l'opérateur std::operator<< )

    Merci d'avance de vos idées!

    (Pour l'instant j'utilise une fonction "to_float" qui me retourne la valeur, mais ca complique la prog et la lisibilité, c'est quand meme plus joli un "=" transparent!)

  2. #2
    screetch
    Invité(e)
    Par défaut
    oui tu peux regarder les operateurs de cast

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class mon_type
    {
      operator int() { return m_value; }
    };
     
    mon_type a = 7;
    int x = a;

  3. #3
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    155
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 155
    Par défaut
    bien merci screetch!

    je savais pas que ca existait cette possibilité

    ca marche avec tous les types!
    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
     
        operator unsigned char() 
        { 
            return (this->m_pt_float.to_float()); 
        }
     
        operator signed char() 
        { 
            return (this->m_pt_float.to_float()); 
        }
        operator unsigned short() 
        { 
            return (this->m_pt_float.to_float()); 
        }
        operator signed short() 
        { 
            return (this->m_pt_float.to_float()); 
        }
        operator unsigned long() 
        { 
            return (this->m_pt_float.to_float()); 
        }
        operator float() 
        { 
            return (this->m_pt_float.to_float()); 
        }
        operator int() 
        { 
            return (this->m_pt_float.to_float()); 
        }

  4. #4
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Les conversions implicites, c'est dangereux, car tu peux te retrouver avec des valeurs bizarres sans svaoir d'où elle viennent.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  5. #5
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message
    Les conversions implicites, c'est dangereux
    Dangereux, le mot est peut-être fort mais ça fini par poser des problèmes quand on ne restreint pas leur utilisation.

    En passant, loicounet, tu abuses de this et les conversions implicites qui ne sont pas const, ça me semble avoir guère de sens.

  6. #6
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    On me le dit tout le temps, n'y va pas à la hache. C'est vrai je prend la bombe A.

    Disons que les conversion implicites, si c'est mal gérées , ca te fout un bordel pas possible, la plus part du temps, pour un service rendu assez faible.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

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

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