Maison  >  Article  >  développement back-end  >  Pouvez-vous faire le `

Pouvez-vous faire le `

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 05:39:02291parcourir

 Can You Make the `

Surcharge d'opérateur virtuel : faire << Virtuel

Tentative de déclaration d'un << L’opérateur entraîne des erreurs du compilateur en raison de la nature des fonctions libres. Pour surmonter cette limitation et activer un comportement virtuel pour les surcharges d'opérateurs personnalisés, une approche alternative est nécessaire.

Transformer l'opérateur en fonction membre

La clé pour introduire un comportement virtuel réside dans la conversion du << opérateur d’une fonction libre vers une fonction membre de la classe. Cependant, le faire directement inverserait l'ordre des paramètres, ce qui entraînerait un placement incorrect des opérandes.

Présentation de l'indirection : la fonction Print()

Pour résoudre ce problème, la méthode fondamentale Le théorème du génie logiciel suggère d'ajouter une couche intermédiaire d'indirection. Au lieu de faire ≪≪ virtual, une fonction virtual print() est ajoutée à la classe :

<code class="cpp">class MyClass {
public:
    virtual void print(ostream& where) const;
};</code>

Redirection << à imprimer()

Le << la fonction free est ensuite redéfinie pour déléguer son comportement à print() :

<code class="cpp">ostream& operator<<(ostream& out, const MyClass& mc) {
    mc.print(out);
    return out;
}</code>

Réalisation d'un comportement virtuel

Avec cette configuration, la fonction << L'opérateur maintient l'ordre correct des paramètres tout en permettant aux sous-classes de remplacer la méthode print() et de personnaliser leur comportement de sortie. Cela permet effectivement un comportement virtuel pour le << opérateur, permettant un polymorphisme dynamique dans le streaming de 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!

Déclaration:
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