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

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

Mary-Kate Olsen
リリース: 2024-12-14 16:07:16
オリジナル
697 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート