仮想オペレーターの克服<< Conundrum
仮想 << を実装しようとしています。演算子を使用している場合、次のコードはコンパイラ エラーになります。
<code class="cpp">virtual friend ostream & operator<<(ostream& os,const Advertising& add);</code>
問題の根本
定義された演算子<<これは無料の関数であり、受信側オブジェクトがないため、仮想としての資格が無効になります。目的の仮想機能を実現するには、演算子をクラス メンバーとして定義する必要があります。
直接定義の問題
演算子の定義<<クラスのメンバーとしては別の問題が発生します。オペランドが逆になり、オブジェクトを出力しようとするときに複雑な問題が発生します。
<code class="cpp">MyClass myObject; myObject << cout; // Legal but not our intended usage</code>
解決策: 間接的なアプローチ
これらの課題を解決するには、追加の仮想関数を導入します。 function:
<code class="cpp">class MyClass { public: virtual void print(ostream& where) const; };</code>
次に、演算子<<を再定義します。新しい仮想関数を活用した無料関数として:
<code class="cpp">ostream& operator<< (ostream& out, const MyClass& mc) { mc.print(out); return out; }</code>
このセットアップでは、演算子<< print() 関数を通じてサブクラスでの出力動作のカスタマイズを可能にしながら、正しいパラメーターの順序を維持するための無料関数。
以上が仮想オペレーターを実装するにはどうすればよいですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。