ホームページ >バックエンド開発 >C++ >'演算子を実行する必要があります

'演算子を実行する必要があります

DDD
DDDオリジナル
2024-12-17 21:42:22612ブラウズ

Should `operator

「演算子<<: フレンド機能かメンバー機能? 操作の種類を考慮しています。」

実装演算子の選択<<フレンド関数またはメンバー関数は、実行される操作の種類によって決まります。

比較演算子 (==、!= など) については、クラス内のメンバー関数として扱うことをお勧めします。クラスは本質的にそれ自体のフレンドであるため、そのインスタンスのプライベート メンバーに簡単にアクセスして比較できます。さらに、独立した関数を通じて 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。