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 :

Operator +,+=, *, ==


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Lycéen
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut Operator +,+=, *, ==
    Bonjour ou bonsoir !


    Je souhaiterais additioner deux objets ensemble (deux fractions), j'ai donc surcharger mon opérateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Zfraction operator+(Zfraction const& a, Zfraction const& b)
    {
        Zfraction copie(a);
        copie += b;
        return copie;
    }
    Cependant, l'operateur += n'est pas déclaré, et j'ai beau chercher sur le net, sur la faq etc, je ne trouve rien pour le déclarer, je n'ai aucune idée de comment faire.
    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Hello,

    Il se déclare de la même façon (et tous les opérateurs se déclarent pareil).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ZFraction& operator+=(ZFaction& left, const ZFraction& right);
    Tu auras probablement besoin de le définir dans ta class ZFraction, ou si tu le laisse en fonction libre il sera friend (car il devra accéder aux membres de ta classe pour faire le calcul)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class ZFraction {
       ...
       friend ZFraction& operator+=(ZFaction& left, const ZFraction& right); // fonction libre friend
       // OU
       ZFraction& operator+=(const ZFraction& right); // fonction membre (ici this est l'opérande de gauche)
    Pour l'opérateur +=, il faut bien faire attention de retourner une référence sur l'opérande de gauche après le calcul. (Pour pouvoir enchaîner les calculs)

    edit: typo

  3. #3
    Membre confirmé
    Profil pro
    Lycéen
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut
    Mhh j'ai du mal a comprendre.

    Dans mon header(la ou il y a ma class), j'ai mis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    friend Zfraction& operator+=(Zfraction& left, const Zfraction& right); // fonction libre friend
    Et dans mon Zfraction.cpp j'ai mis:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zfraction& operator+=(Zfraction& left, const Zfraction& right);
    Cependant ca ne fonctionne pas. Probleme de reference etc

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Le lien habituel..
    Citation Envoyé par Garwan50 Voir le message
    Cependant ca ne fonctionne pas.
    Mais encore ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Membre confirmé
    Profil pro
    Lycéen
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut
    Salut merci de ta réponse, cependant je ne suis pas super a l'aise et je débute en C++, j'ai donc assez de mal a piger ^^.

    obj\Release\Zfraction.o:Zfraction.cpp|| undefined reference to `Zfraction::operator+=(Zfraction)'|
    J'ai regardé la correction du TP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ZFraction& ZFraction::operator+=(ZFraction const& autre)
    {
        m_numerateur = autre.m_denominateur * m_numerateur + m_denominateur * autre.m_numerateur;
        m_denominateur = m_denominateur * autre.m_denominateur;
     
        return *this;    
    }
    Mais y a pas mal de truc que je pige pas. Comme par exemple. Pourquoi on met un Zfraction& au début et juste apres un Zfraction.

    Et que signifie le autre. ?
    Les math c'est pas trop mon truc :pp

  6. #6
    Membre émérite

    Homme Profil pro
    Non disponible
    Inscrit en
    Décembre 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Non disponible

    Informations forums :
    Inscription : Décembre 2012
    Messages : 478
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    La FAQ est merveilleuse ^^ Ça devrais te donner la voie.
    Met ça en relation avec le lien de Bousk !

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Garwan50 Voir le message
    Mais y a pas mal de truc que je pige pas. Comme par exemple. Pourquoi on met un Zfraction& au début et juste apres un Zfraction.

    Et que signifie le autre. ?
    Les math c'est pas trop mon truc :pp
    Aucun rapport avec les maths, il s'agit uniquement de la grammaire de base du langage.
    Ne reconnais-tu pas la syntaxe d'écriture d'une fonction membre (implémantée hors du corps de déclaration de la classe) ??
    ZFraction& est le type de retour.. ZFraction:: signifie qu'il s'agit d'une fonction membre de la classe ZFraction.
    autre est juste le nom d'un paramètre..
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  8. #8
    Membre confirmé
    Profil pro
    Lycéen
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut
    Oui excuse moi, je me suis mal exprimé, je comprend ce qu'est autre. mais... comment dire, je ne vois pas son utilité dans ce cas ci en fait. Si je comprends bien c'est comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void recevoirdegats(nbDegats)
    {
           m_vie -= nbDegats
    }
     
    void frapper(const Personnage &cible)
    {
          cible.recevoirdegats(10)
    }
    Mais dans ce cas présent je ne comprends pas :/

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Tu définis une opération +=, qui attend un opérande (tu ajoutes quoi ???)

    a += b est strictement équivalent à a = a + b, l'opérande de gauche est this, mais il faut bien fournir celui de droite..
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    Membre confirmé
    Profil pro
    Lycéen
    Inscrit en
    Novembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Novembre 2009
    Messages : 67
    Par défaut
    En fait je me prend la tête pour rien je crois :pp.

    Cet méthode me permet de ne pas surcharger les operateur raccourcis, elle est mieux non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Zfraction operator+(Zfraction const& a, Zfraction const& b)
    {
             int copie;
             copie = a + b;
             return copie;
    }

  11. #11
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Garwan50 Voir le message
    Cet méthode me permet de ne pas surcharger les operateur raccourcis, elle est mieux non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Zfraction operator+(Zfraction const& a, Zfraction const& b)
    {
             int copie;
             copie = a + b;
             return copie;
    }
    Pas vraiment, puisque ici "a + b" est un appel à Zfraction::operator+ (qui ne retourne pas un int d'ailleurs), bref un bel appel récursif.

    En outre, lorsque tu implémentes un opérateur +, il est recommandé d’implémenter += afin de rester cohérent avec le fonctionnement classique des opérateurs et ne pas perdre/frustrer l'utilisateur de ta classe (et ça se généralise à tous les opérateurs présentant une forme op= d'ailleurs).
    Et généralement on implémente + en fonction de += car c'est une solution simple, qui ne nécessite pas d'ajouter des getter/passer les attributs en public/déclarer + friend et qui permet de garantir un comportement cohérent entre + et +=.

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

Discussions similaires

  1. [Débutant][String] Opérations sur une chaîne
    Par gandalf_le_blanc dans le forum Général Java
    Réponses: 8
    Dernier message: 08/06/2004, 11h59
  2. afficher la signature des opérations dans XDE
    Par ChristopheH dans le forum Rational
    Réponses: 1
    Dernier message: 24/05/2004, 15h41
  3. [JSP] thread ? Message d'avancement des operations en cours
    Par buffyann dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 18/12/2003, 11h39
  4. operation sur des alias
    Par 74160 dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/11/2003, 18h19
  5. Réponses: 8
    Dernier message: 21/11/2003, 18h38

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