フレンド関数とフレンドクラスの違い

著者: Laura McKinney
作成日: 1 4月 2021
更新日: 13 5月 2024
Anonim
C ++でのフレンド関数とクラスの実際の使用
ビデオ: C ++でのフレンド関数とクラスの実際の使用

コンテンツ


フレンド関数とフレンドクラスは、フレンドキーワードを使用してクラスのプライベートメンバーにアクセスするために使用される手法です。フレンド関数とフレンドクラスの一般的な違いは、フレンド関数を使用するとプライベートクラスメンバーにアクセスできるが、フレンドクラスでは、クラスのプライベートメンバーではなくフレンドクラスの名前にのみアクセスできることです。

フレンド機能 関数またはクラスによって使用されるかどうかは、オブジェクト指向フレームワークに悪影響を与える可能性があります。 カプセル化 反対です オブジェクト指向 パラダイム。これが、フレンド機能を賢く使用する必要がある理由です。 ブレーク その データ隠蔽 コードの。

このフレンド機能はどちらでもありません 可換 そしてまた 推移的。 XはYの友人です。YはXの友人でもあると推測しません。XがYの友人であり、YがZの友人である場合、XがZの友人であることを意味しません。

    1. 比較表
    2. 定義
    3. 主な違い
    4. 結論

比較表

比較の根拠フレンド機能友達クラス
ベーシッククラスのプライベートメンバーに非メンバー関数アクセスを許可するためにfriendキーワードとともに使用される関数です。これは、別のクラスのプライベートメンバーにアクセスするためにfriendキーワードとともに使用されるクラスです。
前方宣言使用する必要があります。必須ではありません。
つかいますフレンド関数は、演算子のオーバーロードのある状況で使用できます。友達クラスは、クラスが別のクラスの上に作成されるときに使用できます。


フレンド関数の定義

フレンド機能 非メンバー関数にアクセスを許可することにより、クラスのプライベートおよび保護されたメンバーにアクセスするために使用されます。このタイプの関数では、宣言時に関数名の前にfriendキーワードが使用されます。フレンド機能に適用される制限条件がいくつかあります。最初の条件は、フレンド関数が子クラスに継承されないことです。 2番目の条件は、ストレージクラス指定子がフレンド関数に存在しない可能性があることです。つまり、静的および外部として宣言できないことを意味します。

friend関数は、クラスの呼び出しオブジェクトでは呼び出されません。フレンド関数の例:グローバル関数、クラスのメンバー関数、関数テンプレートはフレンド関数になります。例の助けを借りてそれを理解しましょう。

#含める 名前空間stdを使用します。クラスファースト{int data; public:first(int i):data(i){} friend void display(const first&a); }; void display(const first&a){cout << "data =" <using namespace std; class First {//友人を宣言するclass friend class Second; public:First():a(0){} void(){cout << "結果は" << a << endl; } private:int a; }; class Second {public:void change(First&yclass、int x){yclass.a = x; }}; int main()最初のobj1; 2番目のobj2; obj1。(); obj2.change(obj1、5); obj1。(); //結果は0です。結果は5です。

  1. フレンド関数は、クラスのプライベートおよび保護されたメンバーにアクセスできる関数です。対照的に、フレンドクラスは、クラスのプライベートメンバーへのアクセスを支援するクラスです。
  2. フレンド関数は、プロトタイプをクラス内に含めることで宣言され、キーワードfriendで先行します。同様に、フレンドクラスもキーワードfriendを使用して定義されます。
  3. forward宣言はfriend関数の場合に使用されますが、friendクラスで使用する必要はありません。

結論

関数が内部メンバーの2つ以上の独立したクラスにアクセスする必要がある場合、フレンド関数が必要です。一方、クラスが別のクラスのメンバーにアクセスする必要がある場合、フレンドクラスが必要です。複数のメンバー関数がその関数のフレンドである必要がある場合、その場合、フレンドクラスを使用することをお勧めします。