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 & operator<<(ostream& os,const Advertising& 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& 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& operator<< (ostream& out, const MyClass& 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!