C++中的友元的體會

友元:假設A中聲明瞭B是我的朋友,則在B內就可以使用了我(A)的一切數據,包括private類型數據。

友元的出現破壞了類的封裝和隱藏性。

 

C++中的友元分爲:友元函數和友元類

1. 友元函數:

在類中聲明,在類外定義:

class A

{

public: A(int i):m_i(i){}

private:

       friend void print(Aa);

       int m_i;

};

void print(A a)

{

       cout<<a.m_i<<endl;

}

 

也可以在類中定義:

class A

{

public: A(int i):m_i(i){}

private:

       friend void print(Aa)

    {

          cout<<a.m_i<<endl;

          //cout<<m_i<<endl;  error

    }

       int m_i;

};

 

注意:

1> 友元函數只是普通的外部函數,它不屬於任何類。所以即使在類內定義它也不能直接訪問類中的東西,必須通過對象訪問。

2> 友元函數在類中的位置是任意的。在private和在public是沒有區別的。

 

2. 友元類

當類A中聲明類B是我的友元時,則在類B內,所有成員函數都是類A的友元函數,也就是說所有成員函數都可以訪問類A的一切資料。(同理通過A的對象訪問)

class A

{

public: A(int i):m_i(i){}

private:

       friend class B;

       int m_i;

};

class B

{

public:

       void print(constA& a)

       {

              cout<<a.m_i<<endl;

       }

};

 

需要注意的幾點:

(1) 友元關係不能被繼承。

(2) 友元關係是單向的,不具有交換性。若類B是類A的友元,類A不一定是類B的友元,要看在類中是否有相應的聲明。

(3) 友元關係不具有傳遞性。若類B是類A的友元,類CB的友元,類C不一定是類A的友元,同樣要看類中是否有相應的申明 

 

其實友元就可以翻譯成朋友更好理解。同英語friend。

發佈了45 篇原創文章 · 獲贊 32 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章