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 C++ Discussion :

ai-je eu raison de faire ceci?


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 402
    Billets dans le blog
    16
    Par défaut ai-je eu raison de faire ceci?
    Bonjour,

    est-ce ainsi que l'on surcharge l'opérateur>> ?

    Code cpp : 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
    class nombre{
       nombre& entree(std::istream &flux);
    };
     
    std::istream& operator>> (std::istream& flux, nombre &nb);
     
    nombre::nombre(std::string const &valeur_init){
    ...
    }
     
    nombre& nombre::entree(std::istream &flux){
      std::string nombre_str;
      flux>>nombre_str;
      nombre ceci(nombre_str);
      *this=ceci;
      *this=this->normalise();
      return *this;
    }
     
     
    std::istream& operator>>(std::istream& flux, nombre &nb){
      nb.entree(flux);
      return flux;
    }
    je suis preneur de toute suggestion

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    C'est plutôt cohérent.

    Juste la séquence:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      nombre ceci(nombre_str);
      *this=ceci;
      *this=this->normalise();
      return *this;
    pique un peu les yeux. La normalisation devrait être appelée dès la construction, et il ne resterait alors que: return *this = nombre(nombre_str);.

    Autre possibilité: On peut raccourcir en définissant l'opérateur>> en une fonction friend et inline, plutôt qu'en 2 fonctions. Ça donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class nombre{
    public:
        friend std::istream&  operator>>( std::istream& flux, nombre& nb ) {
           std::string  nombre_str;
           flux >> nombre_str;    // n'est peut-être pas si simple (on suppose que le texte qui suit est séparé par un caractère non imprimable.)
           nb = nombre{ nombre_str };
           // nb.normalise(); appelé par le constructeur (après création, le 'nombre' est directement opérationnel)
           return  flux;
        }
    };
    Attention, le corps de la fonction doit être dans la class nombre sinon la fonction amie risque de ne pas être retrouvée par le compilateur (c'est dans des cas complexes mais autant prendre cette habitude.)

  3. #3
    Membre éclairé

    Homme Profil pro
    développeur à la maison
    Inscrit en
    Septembre 2006
    Messages
    402
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : développeur à la maison

    Informations forums :
    Inscription : Septembre 2006
    Messages : 402
    Billets dans le blog
    16
    Par défaut
    Oui en effet, ça fonctionne aussi.
    Merci pour la suggestion

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Salut,

    A mon avis, par respect du SRP (https://en.wikipedia.org/wiki/Single...lity_principle), ta classe représente une nombre, la gestion des entrées n'est pas de sa responsabilité, cette fonctionnalité doit être faite ailleur.

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

Discussions similaires

  1. comment faire ceci
    Par java_developper dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/08/2007, 12h55
  2. Peut-on faire ceci avec Perl ?
    Par tagomago dans le forum Langage
    Réponses: 15
    Dernier message: 02/03/2007, 18h21
  3. [Noob][XML][XSL]Comment faire ceci ??
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 31/08/2005, 16h00
  4. [XSL]Comment faire ceci ?? Mon for-each n'affiche pas tout !
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 27/07/2005, 15h04
  5. [Noob][XSL] Comment faire ceci ??
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 22/07/2005, 16h38

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