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!