クラス内のプライベート メンバーには、クラス内のメンバー関数からのみアクセスでき、クラスの外部からはアクセスできないことは誰もが知っています。これは、C++ の最も基本的な利点である C++ のクラス設計のカプセル化と隠蔽のアイデアを反映しています。
しかし、時々本当にこれらのプライベート メンバーにクラス外でアクセスしたい場合は、さらに面倒になり、アクセスすることもパブリック型として宣言することもできないというジレンマに陥ることになります。
フレンドの出現は、この問題を非常にうまく解決できます。つまり、外部関数をフレンド タイプとして宣言し、それにクラス内のプライベート メンバーにアクセスする権利を与えることで、両方の長所を実現できます。これは、文字通りの意味からもわかるように、「友達」と同様に、緑の水路を開きます。
フレンド オブジェクトは、グローバル一般関数または別のクラスのメンバー関数にすることができます。これはフレンド関数と呼ばれます。それだけでなく、フレンドはクラスになることもでき、これをフレンド クラスと呼びます。
フレンドの意味と機能を理解した後、C++ でフレンドを使用する方法を見てみましょう。 friends 関数の場合は、クラス内で関数を宣言し、その関数の前にfriends キーワードを追加するだけです。この機能は独自の権限を持ち、フレンド機能となります。
最後に注意すべきことは、フレンド機能であってもフレンド クラスであっても、フレンドはクラス自体に属していないということです。父親の友人が必ずしも息子の友人であるとは限らないのと同様に、クラス内で this ポインタを使用することも、継承することもできません。
次に、2 点間の距離を求めるプログラムを作成します。
#include<iostream>#include<math.h>usingnamespacestd;classPoint{private:doublex;doubley;public:Point(doublea,doubleb){x=a;y=b;}intGetPoint(){cout<<(<< x<<,<<y<<);return0;}frienddoubleDistance(Point&a,Point&b);};//2 点間の距離を求める doubleDistance(Point&a,Point&b){doublexx;doubleyy;xx=ax-bx;yy = ay-by;returnsqrt(xx*xx+yy*yy);}intmain(){PointA(2.0,3.0);PointB(1.0,2.0);doubledis;dis=Distance(A,B);cout<<dis < <endl;return0;}
2 点間の距離を実装する関数が外部一般関数であることがわかります。クラス内のプライベート メンバーにアクセスする必要があるため、クラス内でフライド フレンド タイプとして宣言します。Point クラスの最後の行を参照してください。 。現時点では、コードは問題なくコンパイルされ、通常の出力は次のようになります。
テスト結果を確認できます。フレンド タイプとして宣言せずに、コンピュータ上で自分で実験して、エラー結果を観察してください。