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
751 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!

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