"Opérateur<< : fonction ami ou membre ? Compte tenu du type d'opération"
La sélection entre l'opérateur d'implémentation<< en tant que fonction ami ou membre dépend du type d'opération effectuée.
Pour les opérateurs de comparaison (==, !=, etc.), il est conseillé de les traiter comme des fonctions membres au sein de la classe. Comme la classe est intrinsèquement amie d’elle-même, elle peut accéder et comparer sans effort les membres privés de ses instances. De plus, l'activation de la conversion automatique pour un opérande via des fonctions autonomes peut entraîner des conséquences inattendues ; d'où la préférence pour les fonctions membres.
À l'inverse, lorsqu'il s'agit d'opérateurs de flux (<<, >>), ils exigent des fonctions externes car ils nécessitent un accès à un objet de flux hors du contrôle de la classe. Ces fonctions peuvent être soit des amies de la classe, soit utiliser une méthode publique qui gère le streaming.
Il est d'usage que les opérateurs de flux renvoient des références aux objets de flux, permettant ainsi un chaînage transparent des opérations. Voici un exemple illustrant cette approche :
#include <iostream> class Paragraph { public: Paragraph(std::string const& init) : m_para(init) {} std::string const& to_str() const { return m_para; } bool operator==(Paragraph const& rhs) const { return m_para == rhs.m_para; } bool operator!=(Paragraph const& rhs) const { return !(this->operator==(rhs)); } bool operator<(Paragraph const& rhs) const { return m_para < rhs.m_para; } private: friend std::ostream & operator<<(std::ostream &os, const Paragraph& p); std::string m_para; }; std::ostream & operator<<(std::ostream &os, const Paragraph& p) { return os << p.to_str(); } int main() { Paragraph p("Plop"); Paragraph q(p); std::cout << p << std::endl << (p == q) << std::endl; }
En comprenant la nature de chaque opération et en adhérant aux choix de mise en œuvre appropriés, vous pouvez exploiter efficacement l'opérateur<< pour manipuler les objets comme on le souhaite.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!