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 :

Probl�me Impl�mentation de surcharge de l�op�rateur +


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre habitu�
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2014
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Par d�faut Probl�me Impl�mentation de surcharge de l�op�rateur +
    Salut, je suis debutant et j ai un petit soucis avec cet petit exemple d'implementation de surcharge d'operateur+. le code est le suivant:
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    #ifndef DUREE_H
    #define	DUREE_H
     
    class Duree {
     
    public:
        Duree(int heures , int minutes, int secondes);
        int GetSecondes() const;
        int GetMinutes() const;
        int GetHeures() const;
     
     
    private:
        int m_heures;
        int m_minutes;
        int m_secondes;
    };
     
    Duree operator+(Duree const& a, Duree const& b);
     
    #endif	/* DUREE_H */
     
     
    #include "Duree.h"
    using namespace std;
     
    Duree::Duree(int heures , int minutes, int secondes) {
     
        m_heures = heures;
        m_minutes = minutes;
        m_secondes = secondes;
     
    }
     
    int Duree::GetSecondes() const {
        return m_secondes;
    }
     
    int Duree::GetMinutes() const {
        return m_minutes;
    }
     
    int Duree::GetHeures() const {
        return m_heures;
    }
     
    Duree operator+(Duree const& a, Duree const& b)
    {
        Duree resultat; 
     
         resultat.GetHeures() = a.GetHeures() + b.GetHeures();
         resultat.GetMinutes() = a.GetMinutes() + b.GetMinutes();
         resultat.GetSecondes() = a.GetSecondes() + b.GetSecondes();
     
        return resultat;  
    }
     
     
     
    #include <iostream>
     
    #include "Duree.h"
     
    using namespace std;
     
    int main() {
     
        Duree duree1(0, 10, 28), duree2(0, 10, 28);
     
        Duree somme = duree1 + duree2;
     
         cout<< "la somme est:"<< somme.GetHeures()<<"h "<< somme.GetMinutes()<< "min "<< somme.GetSecondes()<< "sec"<< endl;
     
     
        return 0;
    }
    Mais le compilateur signale une erreur au niveau du fichier.cpp. Que faire?

    Merci d avance pour votre aide

  2. #2
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

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

    indiquer l'erreur serait plus simple pour les intervenants.

    M'enfin,
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    resultat.GetHeures() = a.GetHeures() + b.GetHeures();
         resultat.GetMinutes() = a.GetMinutes() + b.GetMinutes();
         resultat.GetSecondes() = a.GetSecondes() + b.GetSecondes();
    Comprends-tu ce que tu �cris ?
    Ces 3 lignes sont surement ton erreur et n'ont pas grand sens.
    GetXX comme son nom l'indique, retourne un entier, par copie.
    A quel moment crois-tu que ceci affecte une heure, minute ou seconde � ton objet dur�e ?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    resultat.m_heures = a.GetHeures() + b.GetHeures();
         resultat.m_minutes = a.GetMinutes() + b.GetMinutes();
         resultat.m_secondes = a.GetSecondes() + b.GetSecondes();
    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.

  3. #3
    Membre habitu�
    Homme Profil pro
    �tudiant
    Inscrit en
    Avril 2014
    Messages
    7
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Avril 2014
    Messages : 7
    Par d�faut
    Bonjour, j'ai essay� de modifier le code tel que Bousk me l'a conseill�, mais j obtiens toujours des erreurs de compilation entre la ligne 48 et 57:

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    #ifndef DUREE_H
    #define	DUREE_H
     
    class Duree {
     
    public:
        Duree(int heures , int minutes, int secondes);
        int GetSecondes() const;
        int GetMinutes() const;
        int GetHeures() const;
     
     
    private:
        int m_heures;
        int m_minutes;
        int m_secondes;
    };
     
    Duree operator+(Duree const& a, Duree const& b);
     
    #endif	/* DUREE_H */
     
     
    #include "Duree.h"
    using namespace std;
     
    Duree::Duree(int heures , int minutes, int secondes) {
     
        m_heures = heures;
        m_minutes = minutes;
        m_secondes = secondes;
     
    }
     
    int Duree::GetSecondes() const {
        return m_secondes;
    }
     
    int Duree::GetMinutes() const {
        return m_minutes;
    }
     
    int Duree::GetHeures() const {
        return m_heures;
    }
     
    Duree operator+(Duree const& a, Duree const& b)
    {
        Duree resultat; 
     
         resultat.m_heures = a.GetHeures() + b.GetHeures();
         resultat.m_minutes = a.GetMinutes() + b.GetMinutes();
         resultat.m_secondes = a.GetSecondes() + b.GetSecondes();
     
        return resultat;  
    }
     
     
     
    #include <iostream>
     
    #include "Duree.h"
     
    using namespace std;
     
    int main() {
     
        Duree duree1(0, 10, 28), duree2(0, 10, 28);
     
        Duree somme = duree1 + duree2;
     
         cout<< "la somme est:"<< somme.GetHeures()<<"h "<< somme.GetMinutes()<< "min "<< somme.GetSecondes()<< "sec"<< endl;
     
     
        return 0;
    }

  4. #4
    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,
    Ceci renvoit une copie de l'entier seconde.
    Lui affecter un nouveau nombre ne sera donc que temporaire. (Comme l'a expliqu� Bousk).

    Retour par copie = const int getSecondes() const { return m_secondes; } (Bien penser a mettre le retour constant, cela peut eviter ce genre d'erreur.
    Retour par reference = int& getSecondes() { return m_secondes; } (La valeur retourn�e sera donc modifiable, faire attention avec son utilisation)

    Pour retourner l'objet lui m�me il faut donc soit passer le retour par reference non constante, soit utiliser un setter, ou encore le mieux a faire serait ainsi :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    Duree operator+(Duree const& a, Duree const& b)
    {
         int heures = a.GetHeures() + b.GetHeures();
         int minutes = a.GetMinutes() + b.GetMinutes();
         int secondes = a.GetSecondes() + b.GetSecondes();
         return Duree(heures, minutes, secondes);  
    }

  5. #5
    R�dacteur/Mod�rateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : Canada

    Informations professionnelles :
    Activit� : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par d�faut
    Faudrait r�fl�chir 2s avant de copier/coller du code.
    Tes m_XX sont private, et ton operator+ n'est pas friend.
    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.

  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
    Je me suis fait tapper sur les doigts sur ce retour.
    Dans ce cas pr�sent, il serait donc envisageable de mettre les operateurs directement dans la classe Dur�e non ?
    Car faire "1 + duree" n'aurait pas de sens !?

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Probl�me] H�ritage et surcharge
    Par kamykaze dans le forum C++
    R�ponses: 8
    Dernier message: 13/11/2007, 14h18
  2. R�ponses: 14
    Dernier message: 05/04/2007, 11h12
  3. Enorme probl�me de code surcharg� pour ma GUI
    Par insomniak dans le forum C++
    R�ponses: 26
    Dernier message: 23/12/2006, 17h35
  4. R�ponses: 6
    Dernier message: 12/07/2006, 15h34
  5. [Custom Tags] Probl�me avec une surcharge de m�thode
    Par Strab dans le forum Taglibs
    R�ponses: 19
    Dernier message: 26/08/2005, 16h34

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