Maison > développement back-end > C++ > L'opérateur devrait-il

L'opérateur devrait-il

DDD
Libérer: 2024-12-17 21:42:22
original
756 Les gens l'ont consulté

Should `operator

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

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!

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