57 votes

En C ++, avez-vous besoin de surcharger l'opérateur == dans les deux sens?

Disons que je travaille avec une classe:

 class Foo{
public:
  std:string name;
  /*...*/
}/*end Foo*/

et je fournis une surcharge pour operator==

 bool operator==(const Foo& fooObj, const std::string& strObj) {
    return (fooObj.name == strObj);
}

Dois-je également réimplémenter la même logique en sens inverse?

 bool operator==(const std::string& strObj, const Foo& fooObj) {
    return (strObj == fooObj.name);
}

6voto

Matthieu Brucher Points 18535

Oui, vous le faites. Tout comme dans beaucoup d'autres langages, C ++ prend parti et les comparaisons entre deux objets de types différents conduiront à des appels à deux opérateurs de comparaison différents en fonction de l'ordre.

Bien sûr, vous voulez qu'ils soient cohérents et non surprenants, le second doit donc être défini en fonction du premier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X