仮想オペレーターのオーバーロード: << の作成仮想
仮想
を宣言しようとしています <<フリー関数の性質により、演算子を使用するとコンパイラ エラーが発生します。この制限を克服し、カスタム演算子オーバーロードの仮想動作を有効にするには、別のアプローチが必要です。
演算子をメンバー関数に変換する
仮想動作を導入するための鍵<< を変換することにあります。フリー関数からクラスのメンバー関数への演算子。ただし、直接実行するとパラメータの順序が逆になり、オペランドの配置が正しくなくなります。
間接指定の紹介: Print() 関数
<code class="cpp">class MyClass { public: virtual void print(ostream& where) const; };</code>
この問題を解決するには、Fundamentalソフトウェアエンジニアリングの定理は、間接的な中間層を追加することを提案しています。 << を作成する代わりにvirtual の場合、仮想 print() 関数がクラスに追加されます。
リダイレクト << to print()
<code class="cpp">ostream& operator<<(ostream& out, const MyClass& mc) { mc.print(out); return out; }</code>
The <<次に、free 関数が再定義されて、その動作を print() に委任します。
仮想動作の実現
この設定では、<<演算子は正しいパラメーターの順序を維持しながら、サブクラスが print() メソッドをオーバーライドして出力動作をカスタマイズできるようにします。これにより、<< の仮想動作が効果的に有効になります。演算子により、出力ストリーミングでの動的なポリモーフィズムが可能になります。以上が`を作ってもらえますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。