演算子<< C : フレンド関数とメンバー関数
C では、演算子<<フレンド関数またはメンバー関数として定義できます。この記事では、特定のシナリオでどちらかを選択する根拠について説明します。
演算子に対するフレンド関数アプローチ
演算子を定義する場合<<フレンド関数として、構文には通常次のものが含まれます:
friend bool operator<<(obj const& lhs, obj const& rhs);
このアプローチは、関係の比較にクラスのプライベート メンバーの検査が含まれる場合にお勧めします。フレンド関数はクラスのプライベート メンバーにアクセスできるため、比較を直接実行できます。
演算子のメンバー関数アプローチ
このアプローチでは、演算子<<はクラスのメンバー関数として定義されます:
ostream& operator<<(obj const& rhs);
このアプローチは、比較に公的にアクセス可能なデータまたは単純な操作が含まれる場合に適しています。ただし、重要な制限があります。比較にプライベート メンバーへのアクセスが必要な場合、メンバー関数のアプローチは使用できません。
アプローチの比較
ストリーミング操作:
演算子を定義する場合<<ストリーミング運用では、フレンド機能とメンバー機能の両方を利用できます。ただし、ストリーミング操作でストリーム オブジェクトを変更する必要がある場合 (改行の追加など)、フレンド関数を使用する必要があります。
等価演算子と関係演算子:
= などの演算子の場合=、!=、<、> などは、メンバー関数として定義することをお勧めします。このアプローチにより、クラス内のプライベート メンバーを簡単に比較できます。さらに、追加のフレンド関数の必要性を回避することでコードが簡素化されます。
例
to_str() メソッドを使用した次の段落クラスの例を考えてみましょう。
class Paragraph { public: Paragraph(std::string const& init) : m_para(init) {} std::string const& to_str() const { return m_para; } };
フレンド機能アプローチ:
friend ostream & operator<<(ostream &os, const Paragraph& p) { return os << p.to_str(); }
メンバー関数アプローチ:
ostream & operator<<(ostream &os) { return os << paragraph; }
この場合、プライベートへのアクセスが許可されるため、フレンド関数アプローチが推奨されます。ストリーミング操作用のメンバー m_para。
以上がオペレーターのフレンド関数とメンバー関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。