ホームページ > バックエンド開発 > C++ > フレンドまたはメンバー機能: `operator を使用する必要がある場合

フレンドまたはメンバー機能: `operator を使用する必要がある場合

DDD
リリース: 2024-12-08 04:45:11
オリジナル
1056 人が閲覧しました

Friend or Member Function: When Should `operator

演算子をいつ実装するか<<友達またはメンバーとして関数

概要:

演算子のオーバーロードにより、<< のような演算子を拡張できます。カスタムクラスを操作します。演算子<<を使用すべきであるという疑問が生じます。クラス内のフレンド関数として実装するか、クラス内のメンバー関数として実装するか?

メンバー関数とフレンド関数

メンバー関数

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

利点:

  • クラスのプライベートへの直接アクセスmembers
  • クラス内のストリーミング ロジックのカプセル化

フレンド関数

friend ostream &operator<<(ostream &os, const obj& rhs);
ログイン後にコピー

利点:

  • 複数のクラスで使用可能
  • 自動化を促進できる両方のオペランドの型変換

決定の根拠

等価演算子

等価演算子 (==、!= など) では、次の理由からメンバー関数が優先されます。

  • 彼らはクラスのプライベートに直接アクセスできますdata.
  • 等価比較のためにクラスの内部表現を強制します。

ストリーム演算子

ストリーム演算子 (<<、>>) の場合、フレンド関数が必要です:

  • それらは異なるタイプのオブジェクトに対して動作します(例: ostream とカスタム クラス)。
  • 連鎖操作のストリーム オブジェクトへの参照を返します。

例:

プライベート m_para 文字列メンバーを持つ Paragraph クラスを考えてみましょう。演算子<<を実装したいと考えています。段落のテキストを印刷するには:

class Paragraph {
public:
    Paragraph(const string& init) : m_para(init) {}
    const string& to_str() const { return m_para; }
    bool operator==(const Paragraph& rhs) const { return m_para == rhs.m_para; }
    friend ostream &operator<<(ostream &os, const Paragraph& p);

private:
    string m_para;
};

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

この例では、operator<<は、さまざまな型で動作し、ストリーム参照を返すため、フレンド関数として実装されます。 to_str() メソッドは、プライベート m_para メンバーにアクセスし、それを出力用の文字列に変換するために使用されます。

以上がフレンドまたはメンバー機能: `operator を使用する必要がある場合の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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