學習友元函數之後,我們再來看友元類,也是一樣的道理和使用方法。如果把一個類A宣告為另一個類B的友元類,則類A中的所有成員函數都可以存取B類中的成員,使用方法也一樣,在類B中進行宣告即可。
還是上一節的程式功能,我們稍作更改:
#include<iostream>#include<math.h>usingnamespacestd;classPoint{private:doublex;doubley;public:Point(doublea,doubleb){x=a;y=b;}intGetPoint(){cout<<(<< x<<,<<y<<);return0;}intdistancetoLine(){}friendclassTool;};classTool{public:doubleGetX(Point&A){cout<<Ax<<endl;returnA.x;}doubleGetY(Point&A){ cout<<Ay<<endl;returnA.y;}doubledis(Point&A){cout<<sqrt(Ax*A.x+Ay*Ay)<<endl;returnsqrt(Ax*A.x+Ay*Ay); }};intmain(){PointA(2.0,3.0);ToolT;T.GetX(A);T.GetY(A);T.dis(A);return0;}
可以看到我們又定義了一個工具類,可以取得一個點類的橫、縱座標以及求出這個點距離原點的距離,由三個方法實現,封裝到一個類Tool裡。並且在Point類別裡進行友元類別的聲明,可以看到使用方法。
請大家多體會友元的作用,明白友元的意義。
最後我們將友元機制的優缺點總結如下:
優點:更方便快速的存取類別內的私有成員。
缺點:打破了C++中的封裝思想。
大家合理使用友元!