「演算子<<: フレンド機能かメンバー機能? 操作の種類を考慮しています。」
実装演算子の選択<<フレンド関数またはメンバー関数は、実行される操作の種類によって決まります。
比較演算子 (==、!= など) については、クラス内のメンバー関数として扱うことをお勧めします。クラスは本質的にそれ自体のフレンドであるため、そのインスタンスのプライベート メンバーに簡単にアクセスして比較できます。さらに、独立した関数を通じて 1 つのオペランドの自動変換を有効にすると、予期しない結果が生じる可能性があります。したがって、メンバー関数が優先されます。
逆に、ストリーム演算子 (<<、>>) を扱う場合、クラスの制御外のストリーム オブジェクトへのアクセスが必要になるため、外部関数が必要になります。これらの関数は、クラスのフレンドであることも、ストリーミングを処理するパブリック メソッドを利用することもできます。
ストリーム オペレーターがストリーム オブジェクトへの参照を返すのが一般的で、これにより操作のシームレスな連鎖が可能になります。このアプローチを示す例を次に示します。
#include <iostream> class Paragraph { public: Paragraph(std::string const& init) : m_para(init) {} std::string const& to_str() const { return m_para; } bool operator==(Paragraph const& rhs) const { return m_para == rhs.m_para; } bool operator!=(Paragraph const& rhs) const { return !(this->operator==(rhs)); } bool operator<(Paragraph const& rhs) const { return m_para < rhs.m_para; } private: friend std::ostream & operator<<(std::ostream &os, const Paragraph& p); std::string m_para; }; std::ostream & operator<<(std::ostream &os, const Paragraph& p) { return os << p.to_str(); } int main() { Paragraph p("Plop"); Paragraph q(p); std::cout << p << std::endl << (p == q) << std::endl; }
各操作の性質を理解し、適切な実装の選択に従うことで、演算子<<を効果的に活用できます。オブジェクトを必要に応じて操作します。
以上が'演算子を実行する必要がありますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。