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 :

Surchage operateurs C++


Sujet :

C++

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2012
    Messages : 66
    Points : 49
    Points
    49
    Par défaut Surchage operateurs C++
    Bonjour,

    je suis actuellement en train de suivre un cours C++, et j'ai un petit problème :

    je suis arrivé au chapitres concernant la POO et notamment les opérateurs arithmetiques.

    tout d'abord dans le .h :

    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
     
    #ifndef DEF_DUREE
    #define DEF_DUREE
     
    class Duree
    {
        public:
     
        Duree(int heures = 0, int minutes = 0, int secondes = 0);
        Duree& operator+=(const Duree &duree);
        void afficher() const;
     
        private:
     
        int m_heures;
        int m_minutes;
        int m_secondes;
    };
     
    Duree operator+(Duree const& a, Duree const& b);
     
     
    #endif
    je voudrais comprendre tout ce code. je ne vois pas de différence entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Duree& operator+=(const Duree &duree);
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Duree operator+(Duree const& a, Duree const& b);
    puis Pareil dans le .cpp :

    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
    38
    39
    40
    41
    42
    43
     
    #include <iostream>
    #include "Duree.h"
     
    using namespace std;
     
    Duree::Duree(int heures, int minutes, int secondes)
        : m_heures(heures), m_minutes(minutes), m_secondes(secondes)
    {
     
    }
     
    Duree& Duree::operator+=(const Duree &duree2)
    {
        // 1 : ajout des secondes
        m_secondes += duree2.m_secondes; // Exceptionnellement autorisé car même classe
        // Si le nombre de secondes dépasse 60, on rajoute des minutes et on met un nombre de secondes inférieur à 60
        m_minutes += m_secondes / 60;
        m_secondes %= 60;
     
        // 2 : ajout des minutes
        m_minutes += duree2.m_minutes;
        // Si le nombre de minutes dépasse 60, on rajoute des heures et on met un nombre de minutes inférieur à 60
        m_heures += m_minutes / 60;
        m_minutes %= 60;
     
        // 3 : ajout des heures
        m_heures += duree2.m_heures;
     
        return *this;
    }
     
    void Duree::afficher() const
    {
        cout << m_heures << "h" << m_minutes << "m" << m_secondes << "s" << endl;
    }
     
    Duree operator+(Duree const& a, Duree const& b)
    {
        Duree copie(a);
        copie += b;
        return copie;
    }
    merci d'avance
    je commence à apprécier la POO ce serait dommage de s'arêtter là

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    L'opérateur += travaille sur l'objet courant. Si à la place tu te contentais de surcharger les opérateurs = et + séparément (comme le fait le langage C#) tu te retrouves avec une copie supplémentaire (voire deux). Ce n'est pas génant quand ta classe contient juste un entier, mais quand elle contient un tableau ou une chaîne de caractères.

    Au moins, cet exemple est correct. J'ai déjà vu des cours qui mentionnent l'opérateur + mais l'implémentent comme un opérateur +=...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. surchage d'operateur ?
    Par Baxter67 dans le forum C++Builder
    Réponses: 1
    Dernier message: 20/12/2007, 16h17
  2. Surchage de l'operateur ++ en postfix/prèfix
    Par CriPpLe dans le forum C++
    Réponses: 3
    Dernier message: 18/02/2006, 12h43
  3. operateur de condition
    Par Jean-Matt dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/12/2004, 15h56
  4. [langage] opérateur booleen
    Par louisis dans le forum Langage
    Réponses: 4
    Dernier message: 30/06/2004, 16h12
  5. [langage] l'operateur tr///
    Par March' dans le forum Langage
    Réponses: 4
    Dernier message: 03/03/2003, 21h57

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