Maison >développement back-end >C++ >Pourquoi ne puis-je pas créer l'opérateur
Mise en œuvre d'un opérateur virtuel<<
Le besoin d'un opérateur virtuel<< se produit lors de la personnalisation du comportement de l'opérateur de streaming pour différentes classes. Les tentatives pour définir l'opérateur comme virtuel conduisent souvent à l'erreur "opérateur << : seules les fonctions et bases membres peuvent être virtuelles."
Le dilemme des fonctions libres
Le problème se pose car l'opérateur<< est généralement définie comme une fonction libre, dépourvue d'objet récepteur et ne peut pas être virtuelle. En revanche, définir l'opérateur en tant que fonction membre inverse l'ordre des paramètres, provoquant une erreur de compilation.
Une solution via l'indirection
Pour résoudre ce dilemme, envisagez d'ajouter une fonction de membre virtuel qui encapsule le comportement de sortie souhaité :
<code class="cpp">class MyClass { public: virtual void print(ostream& out) const; // Virtual output function };</code>
Opérateur personnalisé avec comportement virtuel
Avec la fonction de membre virtuel en place, vous pouvez définir l'opérateur≪≪ en tant que fonction gratuite qui délègue à la fonction d'impression :
<code class="cpp">ostream& operator<<(ostream& out, const MyClass& mc) { mc.print(out); // Calls the virtual print function return out; }</code>
Cette approche maintient l'ordre correct des paramètres pour l'opérateur<< fonction gratuite tout en permettant la personnalisation du comportement de sortie via la fonction membre virtuelle. Les sous-classes peuvent remplacer la fonction d'impression pour implémenter leur propre formatage de sortie personnalisé.
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!