若某個函式是某class的friend,那個函式就可以存取到private的資料。
它會被宣告在class外面,就像一般的函式一樣。不過在class裡面會多加一個friend在前面。
寫在private或public部分沒有影響,畢竟它不是member function,只是friend。
class CPoint
{
private:
int x,y;
friend CPoint offset(CPoint &pt,int diff);
public:
CPoint(){x=0,y=0;}
CPoint(int a,int b){x=a,y=b;}
void Print(){cout<<x<<" "<<y<<endl;}
};
CPoint offset(CPoint &pt,int diff)
{
pt.x+=diff;pt.y+=diff;
return pt;
}
int main()
{
CPoint p1(3,4);
p1.Print();
offset(p1,10);
p1.Print();
return 0;
}
friend除了用在function上,還能用在class。
如果:
class A
{
friend class B;
// other code....
};
那class B裡的所有member function都能取用class A的private資料。
但friend的關係並非雙向!
沒有留言:
張貼留言