Bonjour,
Je vous donne le code en premier lieu
duree.hh
#ifndef DUREE_HH_INCLUDED
#define DUREE_HH_INCLUDED
class Duree
{
public :
Duree(int heures=0, int minutes=0, int secondes=0);
bool estEgal(Duree const&b); //const//demander pourquoi la methode est constante ou faire un test
private :
int m_heures;
int m_minutes;
int m_secondes;
};
//================================fonction hors de l'objet========================
bool operator==(Duree const& a, Duree const& b);//referance constante pour ne pas modifier les valeurs de l'objet,variable,etc...
#endif // DUREE_HH_INCLUDED
curee.cpp
#include "Duree.hh"
Duree::Duree(int heures, int minutes, int secondes): m_heures(heures),m_minutes(minutes),m_secondes(secondes)
{
}
bool Duree::estEgal(Duree const&b)
{
return (m_heures==b.m_heures&&m_minutes==b.m_minutes&&m_secondes==b.m_secondes);
}
//===========================fonction hors de l'objet============================
bool operator==(Duree const& a, Duree const& b)
{
return a.estEgal(b);
}
Message du compilateur
||=== Build: Debug in dureeSurcharge (compiler: GNU GCC Compiler) ===|
E:\projetc++\formation2017\openclassroom\POO\chapPOO2surchargedoperateur\classDureeSurcharge\dureeSurcharge\Duree.cpp||In function 'bool operator==(const Duree&, const Duree&)':|
E:\projetc++\formation2017\openclassroom\POO\chapPOO2surchargedoperateur\classDureeSurcharge\dureeSurcharge\Duree.cpp|17|error: passing 'const Duree' as 'this' argument of 'bool Duree::estEgal(const Duree&)' discards qualifiers [-fpermissive]|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|
J'ai bien compris que dans la fonction operator on appel la methode estEgale de l'objet a afin de comparer ses attributs avec ceux de b.
On passe par des "variables objets" en référance constante afin de "lire" les attributs sans les copier ni les modifier.
Mais je ne comprends pas pourquoi je dois créer la méthode bool estEgal en constante de la manière suivante :
bool Duree::estEgal(duree const& b)const;
Surement un simple problème de logique mais qui me taraude.
Et à ce niveau du cours le concept d'amitié n'as pas encore été abordé on utilise donc une méthode (estEgal ou get)