概要:
演算子のオーバーロードにより、<< のような演算子を拡張できます。カスタムクラスを操作します。演算子<<を使用すべきであるという疑問が生じます。クラス内のフレンド関数として実装するか、クラス内のメンバー関数として実装するか?
ostream& operator<<(ostream &os, const obj& rhs);
利点:
friend ostream &operator<<(ostream &os, const obj& rhs);
利点:
等価演算子 (==、!= など) では、次の理由からメンバー関数が優先されます。
ストリーム演算子 (<<、>>) の場合、フレンド関数が必要です:
例:
プライベート 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 サイトの他の関連記事を参照してください。