ホームページ >バックエンド開発 >C++ >オペレーターのフレンド関数とメンバー関数

オペレーターのフレンド関数とメンバー関数

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-14 16:07:16694ブラウズ

Friend Function vs. Member Function for Operator

演算子<< C : フレンド関数とメンバー関数

C では、演算子<<フレンド関数またはメンバー関数として定義できます。この記事では、特定のシナリオでどちらかを選択する根拠について説明します。

演算子に対するフレンド関数アプローチ

演算子を定義する場合<<フレンド関数として、構文には通常次のものが含まれます:

friend bool operator<<(obj const&amp; lhs, obj const&amp; rhs);

このアプローチは、関係の比較にクラスのプライベート メンバーの検査が含まれる場合にお勧めします。フレンド関数はクラスのプライベート メンバーにアクセスできるため、比較を直接実行できます。

演算子のメンバー関数アプローチ

このアプローチでは、演算子<<はクラスのメンバー関数として定義されます:

ostream&amp; operator<<(obj const&amp; rhs);

このアプローチは、比較に公的にアクセス可能なデータまたは単純な操作が含まれる場合に適しています。ただし、重要な制限があります。比較にプライベート メンバーへのアクセスが必要な場合、メンバー関数のアプローチは使用できません。

アプローチの比較

ストリーミング操作:
演算子を定義する場合<<ストリーミング運用では、フレンド機能とメンバー機能の両方を利用できます。ただし、ストリーミング操作でストリーム オブジェクトを変更する必要がある場合 (改行の追加など)、フレンド関数を使用する必要があります。

等価演算子と関係演算子:
= などの演算子の場合=、!=、<、> などは、メンバー関数として定義することをお勧めします。このアプローチにより、クラス内のプライベート メンバーを簡単に比較できます。さらに、追加のフレンド関数の必要性を回避することでコードが簡素化されます。

to_str() メソッドを使用した次の段落クラスの例を考えてみましょう。

class Paragraph
{
    public:
        Paragraph(std::string const&amp; init) : m_para(init) {}

        std::string const&amp; to_str() const { return m_para; }
};

フレンド機能アプローチ:

friend ostream &amp; operator<<(ostream &amp;os, const Paragraph&amp; p) {
    return os << p.to_str();
}

メンバー関数アプローチ:

ostream &amp; operator<<(ostream &amp;os) {
    return os << paragraph;
}

この場合、プライベートへのアクセスが許可されるため、フレンド関数アプローチが推奨されます。ストリーミング操作用のメンバー m_para。

以上がオペレーターのフレンド関数とメンバー関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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