friend class & virtual class member

friend class – 朋友類別,或稱友元類
可讓朋友類別使用自己的私有成員
但 friend 的關係是無法被繼承的
衍生類別可以動點手腳來達成"偽" friend (virtual class member)

先來看一個簡單的 friend 關係

 // 宣告類別
 class CShared;
 
class CFriend;

 // 定義
 class CShared
 {
 // 宣告 CFriend 為朋友類別
 friend class CFriend;

 private:
     int _iii;
 };

 class CFriend
 {
 protected:
     CShared _SharedClass;

 public:
     void Show()
     {
         // 使用 CShared 的私有成員
         cout << _SharedClass._iii << endl;
     }
}

OK~
那麼如果 CFriend 的衍生類別也需要得知 CShared 私有成員的話
就只需要在
CFriend 裡定義一個函數來對 CShared 私有成員做處理即可

  class CFriend
 {
 protected:
     CShared _SharedClass;

 public:
     void Show()
     {
         cout << _SharedClass._iii << endl;
     }

 protected:
     // 增加取得
CShared::_iii  的函式
     int GetIII( ) { return
_SharedClass._iii; }
}

 class CAdv : public CFriend
 {
 public:
     // 透過父類別的函式取得
CShared 私有類別
     void Show( ) { cout << GetIII() << endl; }
 }

OK~
就是這樣啦!
雖然目前還沒有要用到,或許哪天會用到吧(遠望)
原文章裡面有提到實際應用的範例,可以去看看~

來源: 创意组合——friend class + virtual class member

–End

2 thoughts on “friend class & virtual class member

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s