Maison > développement back-end > C++ > Fonction d'ami ou de membre : quand l'opérateur doit-il

Fonction d'ami ou de membre : quand l'opérateur doit-il

DDD
Libérer: 2024-12-08 04:45:11
original
1056 Les gens l'ont consulté

Friend or Member Function: When Should `operator

Quand implémenter l'opérateur<< en tant que fonction ami ou membre

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 ?

Fonction membre vs fonction ami

Fonction membre

ostream& operator<<(ostream &os, const obj& rhs);
Copier après la connexion

Avantages :

  • Accès direct aux membres privés de la classe
  • Encapsulation de logique de streaming au sein de la classe

Fonction Ami

friend ostream &operator<<(ostream &os, const obj& rhs);
Copier après la connexion

Avantages :

  • Peut être utilisé par plusieurs classes
  • Peut faciliter la conversion automatique de type pour les deux opérandes

Justification de Décision

Opérateurs d'égalité

Pour les opérateurs d'égalité (par exemple, ==, !=), les fonctions membres sont préférées car :

  • Ils ont un accès direct à la classe données privées.
  • Ils appliquent la représentation interne de la classe pour l'égalité comparaisons.

Opérateurs de flux

Pour les opérateurs de flux (<<, >>), des fonctions amies sont nécessaires :

  • Ils opèrent sur des objets de différents types (par exemple, ostream et la classe personnalisée).
  • Ils renvoient une référence à l'objet stream pour les chaînés opérations.

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();
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal