Introduction :
La surcharge des opérateurs nous permet d'étendre les opérateurs comme << pour travailler avec des classes personnalisées. La question se pose : l'opérateur<< être implémenté en tant que fonction ami ou fonction membre au sein de la classe ?
ostream& operator<<(ostream &os, const obj& rhs);
Avantages :
friend ostream &operator<<(ostream &os, const obj& rhs);
Avantages :
Pour les opérateurs d'égalité (par exemple, ==, !=), les fonctions membres sont préférées car :
Pour les opérateurs de flux (<<, >>), des fonctions amies sont nécessaires :
Exemple :
Considérez une classe Paragraph avec un membre de chaîne m_para privé. Nous voulons implémenter l'opérateur<< pour imprimer le texte du paragraphe :
class Paragraph { public: Paragraph(const string& init) : m_para(init) {} const string& to_str() const { return m_para; } bool operator==(const Paragraph& rhs) const { return m_para == rhs.m_para; } friend ostream &operator<<(ostream &os, const Paragraph& p); private: string m_para; }; ostream &operator<<(ostream &os, const Paragraph& p) { return os << p.to_str(); }
Dans cet exemple, l'opérateur<< est implémentée en tant que fonction amie car elle fonctionne sur différents types et renvoie une référence de flux. La méthode to_str() est utilisée pour accéder au membre privé m_para et le convertir en chaîne pour la sortie.
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!