ホームページ > バックエンド開発 > C++ > なぜ「演算子」を作れないのか

なぜ「演算子」を作れないのか

Mary-Kate Olsen
リリース: 2024-10-26 09:22:29
オリジナル
572 人が閲覧しました

Why Can't I Make the `operator

仮想オペレーターの実装<<

仮想オペレーターの必要性<<これは、さまざまなクラスのストリーミング オペレーターの動作をカスタマイズするときに発生します。演算子を仮想として定義しようとすると、多くの場合、「演算子 <<: メンバー関数と基底のみが仮想にできます。」というエラーが発生します。

自由関数のジレンマ

演算子<<が原因で問題が発生します。通常、これは自由関数として定義されますが、これにはレシーバー オブジェクトがなく、仮想にすることはできません。一方、演算子をメンバー関数として定義すると、パラメーターの順序が逆になり、コンパイル エラーが発生します。

間接法による解決策

このジレンマを解決するには、次のようにします。目的の出力動作をカプセル化する仮想メンバー関数の追加を検討してください。

<code class="cpp">class MyClass {
public:
    virtual void print(ostream& out) const; // Virtual output function
};</code>
ログイン後にコピー

仮想動作を使用したカスタマイズされた演算子

仮想メンバー関数を配置すると、以下を定義できます。演算子

<code class="cpp">ostream& operator<<(ostream& out, const MyClass& mc) {
    mc.print(out); // Calls the virtual print function
    return out;
}</code>
ログイン後にコピー

このアプローチでは、演算子の正しいパラメーター順序が維持されます無料の関数であると同時に、仮想メンバー関数を通じて出力動作をカスタマイズできます。サブクラスは print 関数をオーバーライドして、独自のカスタム出力形式を実装できます。

以上がなぜ「演算子」を作れないのかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート