Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Candidat au titre de Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    mars 2012
    Messages
    47
    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 : 47
    Points : 10
    Points
    10

    Par défaut Surchage operateurs C++

    Bonjour,

    je suis actuellement en train de suivre le cours C++ sur le site du zero, 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 :
    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 :
     Duree& operator+=(const Duree &duree);
    et
    Code :
     Duree operator+(Duree const& a, Duree const& b);
    puis Pareil dans le .cpp :

    Code :
    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 Confirmé Sénior Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    24 162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

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

    Informations forums :
    Inscription : septembre 2005
    Messages : 24 162
    Points : 35 295
    Points
    35 295

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •