Maison > développement back-end > C++ > le corps du texte

Pourquoi ne puis-je pas créer l'opérateur

Mary-Kate Olsen
Libérer: 2024-10-26 09:22:29
original
501 Les gens l'ont consulté

Why Can't I Make the `operator

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

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

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!

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!