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

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

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 06:57:03540parcourir

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>

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>

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>

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>

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!

Déclaration:
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