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

Pouvez-vous faire le `

Linda Hamilton
Libérer: 2024-10-27 05:39:02
original
365 Les gens l'ont consulté

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

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

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal