2020年8月14日 星期五

friend

若某個函式是某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的關係並非雙向!

沒有留言:

張貼留言