ホームページ > バックエンド開発 > C++ > 演算子のオーバーロードにおけるフレンド関数とメンバー関数: ` に対してフレンド関数が推奨されるのはどのような場合か

演算子のオーバーロードにおけるフレンド関数とメンバー関数: ` に対してフレンド関数が推奨されるのはどのような場合か

DDD
リリース: 2025-01-03 04:14:39
オリジナル
750 人が閲覧しました

Friend Function vs. Member Function for Operator Overloading: When is a Friend Function Preferred for `

演算子のオーバーロード: "<<" のフレンド関数とメンバー関数

C では、オーバーロードされた演算子はフレンド関数またはメンバー関数として実装できます。ストリーム挿入演算子「<<」に関しては、これらのアプローチのどちらを選択するかについて、特定の考慮事項を考慮する必要があります。

フレンド関数の使用

friend ostream & operator<<(ostream & os, const Paragraph& p) {
    return os << p.to_str();
}
ログイン後にコピー

このアプローチはストリームに一般的に使用されます。演算子の理由:

  • ストリームの実行に必要なストリーム オブジェクト (os) へのアクセスを許可します。
  • これは、チェーン目的でストリーム参照を返すストリーム演算子の規則に従います。

メンバー関数の使用

ostream & operator<<(Paragraph const& rhs);
ログイン後にコピー

考えたくなりますが、メンバー関数はすべてのクラス メソッドで使用する必要があるため、このアプローチは "<<" に対しては推奨されません。演算子にはいくつかの理由があります:

  • メンバー関数からストリーム オブジェクト (os) にアクセスできません。
  • メンバー関数で "to_str" メソッドを手動で呼び出す必要があります。これは冗長でエラーが発生しやすくなります。
  • ストリーム オペレーターがメンバーになることは一般的ではありません。

次のクラスを考えてみましょう:

class Paragraph {
    std::string m_para;

public:
    Paragraph(std::string const& init) : m_para(init) {}

    std::string const& to_str() const { return m_para; }
};
ログイン後にコピー

根拠

この場合、" <<」

  • ストリーミング用のストリーム オブジェクト (OS) へのアクセスを提供します。
  • ストリーム参照を返すストリーム オペレーターの規則に従います。
  • メンバー関数を使用する場合と比較して、コードの重複と潜在的なエラーが削減されます。

以上が演算子のオーバーロードにおけるフレンド関数とメンバー関数: ` に対してフレンド関数が推奨されるのはどのような場合かの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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