Maison > développement back-end > C++ > Fonction ami par rapport à la fonction membre pour la surcharge des opérateurs : quand une fonction ami est-elle préférée pour `

Fonction ami par rapport à la fonction membre pour la surcharge des opérateurs : quand une fonction ami est-elle préférée pour `

DDD
Libérer: 2025-01-03 04:14:39
original
845 Les gens l'ont consulté

Friend Function vs. Member Function for Operator Overloading: When is a Friend Function Preferred for `

Surcharge d'opérateur : fonction amie par rapport à la fonction membre pour "<<"

En C, les opérateurs surchargés peuvent être implémentés soit en tant que fonctions amies, soit en tant que fonctions membres. En ce qui concerne l'opérateur d'insertion de flux "<<", certaines considérations guident le choix entre ces approches.

Utilisation d'une fonction ami

friend ostream & operator<<(ostream & os, const Paragraph& p) {
    return os << p.to_str();
}
Copier après la connexion

Cette approche est couramment utilisée pour les flux opérateurs car :

  • Il permet d'accéder à l'objet flux (os), qui est nécessaire à l'exécution du flux insertion.
  • Il suit la convention des opérateurs de flux renvoyant une référence de flux à des fins de chaînage.

Utiliser une fonction membre

ostream & operator<<(Paragraph const& rhs);
Copier après la connexion

Bien qu'il soit tentant de penser que les fonctions membres doivent être utilisées pour toutes les méthodes de classe, cette approche n'est pas recommandée pour le "<<" opérateur pour plusieurs raisons :

  • Vous ne pouvez pas accéder à l'objet stream (os) depuis une fonction membre.
  • Vous devrez appeler manuellement la méthode "to_str" dans la fonction membre, qui est redondant et sujet aux erreurs.
  • Il n'est pas conventionnel pour les opérateurs de flux d'être membres fonctions.

Exemple

Considérons la classe suivante :

class Paragraph {
    std::string m_para;

public:
    Paragraph(std::string const& init) : m_para(init) {}

    std::string const& to_str() const { return m_para; }
};
Copier après la connexion

Raison d'être

Dans ce cas, utiliser une fonction ami pour le " ≪≪" L'opérateur est le choix préféré car :

  • Il donne accès à l'objet de flux (OS) pour le streaming.
  • Il suit la convention des opérateurs de flux renvoyant une référence de flux.
  • Cela réduit la duplication de code et les erreurs potentielles par rapport à l'utilisation d'une fonction membre.

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!

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