Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++ > Débuter
Débuter Forum d'entraide pour débuter en langage de programmation C++. Avant de poster : cours d'initiation au C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 07/01/2013, 06h12   #1
hotman1313
Invité régulier
 
Homme
Étudiant
Inscription : mars 2012
Messages : 31
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 : 31
Points : 7
Points : 7
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à
hotman1313 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 09h49   #2
Médinoc
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 22 495
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France

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

Informations forums :
Inscription : septembre 2005
Messages : 22 495
Points : 32 286
Points : 32 286
Envoyer un message via MSN à Médinoc
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.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h33.


 
 
 
 
Partenaires

Hébergement Web