很多書本教你的 不要使用 friend, 結果意外的被我發現新方法, 就是大量的使用friend.
因為我不寫繼承的, 所以會有很多class, 之前整理程式碼, 發現閱讀code有些費時,
不知要從哪裡下手.
突然閃過一個念頭, friend 根本是救星.
經過一個多月整理程式碼的心得:
這是程式碼裡的:
class CShadowRole
{
private:
//*** 這裡面有7個變數, 12個函數, 看起來也算蠻大的class ***//
public:
CShadowRole()
{
m_nRole=0; for(int i=0; i<MAX_PLAYER; i++)m_szRole[i].pRole=NULL;
}
friend class CGame;
friend void interface_ShadowRole_AddRole( class CViewFrustum *pCull, class CMyRole *pMyRole, int idModel, BYTE wpn, float time );
};
看到沒有, public 只有一個 初始的, 剩下甚麼都沒有 有兩個 friend.
這樣的class幾乎是沒有用的, 但是那兩個 friend 就是重點了,
沒錯, 這個class CShadowRole 只在 class Game裡面使用 跟那個函數裡使用
其他都不能使用.
這樣不是很清楚嗎? 一看到這個class 的宣告 就一目了然 這個 class的使用方法.
所有要存取 CShadowRole必須來這裡宣告firend 才可以使用.
就很容易看出class 彼此之間的關係.
---------------------------------------------------------------------------------------------------------
但是 上面是理想的狀態, 但是 有一個致命的缺點 就是會有一大串的friend,
這就沒有意義了.
-------------------------------------------------------------------------------------------------
所以C++的對於類別成員的封裝 太爛了 只有兩種 private, 跟 public.
應該再增加一個封裝的關鍵字: 也是取名叫做 friend.
宣告為 friend function 跟 friend class, 可以存取宣告 friend 跟public內的函數或是變數.
這樣 friend 真的就會實現 軟體工程的方法.
沒有留言:
張貼留言