Maison > développement back-end > C++ > Comment pouvez-vous implémenter un opérateur virtuel

Comment pouvez-vous implémenter un opérateur virtuel

Barbara Streisand
Libérer: 2024-10-26 06:57:03
original
632 Les gens l'ont consulté

How Can You Implement a Virtual `operator

Surmonter l'opérateur virtuel<< Énigme

Dans une tentative de mise en œuvre d'un << opérateur, le code suivant entraîne une erreur de compilation :

<code class="cpp">virtual friend ostream &amp; operator<<(ostream&amp; os,const Advertising&amp; add);</code>
Copier après la connexion

La racine du problème

L'opérateur défini<< est une fonction gratuite, rendant impossible sa qualification de virtuelle du fait de l'absence d'objet récepteur. Pour obtenir la fonctionnalité virtuelle souhaitée, l'opérateur doit être défini en tant que membre de la classe.

Le problème avec la définition directe

Définir l'opérateur<< en tant que membre de la classe pose un problème différent. Les opérandes seront inversés, provoquant des complications lors de la tentative de sortie d'un objet :

<code class="cpp">MyClass myObject;
myObject << cout; // Legal but not our intended usage</code>
Copier après la connexion

La solution : approche indirecte

Pour relever ces défis, introduisez un virtuel supplémentaire function :

<code class="cpp">class MyClass {
public:
    virtual void print(ostream&amp; where) const;
};</code>
Copier après la connexion

Ensuite, redéfinissez l'opérateur<< en tant que fonction gratuite, tirant parti de la nouvelle fonction virtuelle :

<code class="cpp">ostream&amp; operator<< (ostream&amp; out, const MyClass&amp; mc) {
    mc.print(out);
    return out;
}</code>
Copier après la connexion

Cette configuration permet à l'opérateur<< fonction gratuite pour maintenir l'ordre correct des paramètres tout en permettant la personnalisation du comportement de sortie dans les sous-classes via la fonction print().

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