friend friend的聲明可以出現在授權類的public, protected 和private等任意區域, 把一個全局函數、另一個類的成員函數或另一個類聲明為授權類的friend,使它擁有訪問授權類任何成員的特權,有時為了簡化代碼的書寫,可以將友元的定義和聲明都放在授權類內,但它依然是友元而 ...
friend
friend的聲明可以出現在授權類的public, protected 和private等任意區域, 把一個全局函數、另一個類的成員函數或另一個類聲明為授權類的friend,使它擁有訪問授權類任何成員的特權,有時為了簡化代碼的書寫,可以將友元的定義和聲明都放在授權類內,但它依然是友元而不是成員。即其作用域不會因友元聲明而改變
//全局函數foo(),A類的成員函數bar,以及B類的所有成員函數,都可以訪問C類的私有和保護成員
void foo(void){...} //全局函數
class A{
void bar(void) const{...} //成員函數
};
class B{...}; //類
class C{ //授權類
private:
...
friend void foo(void);
friend void A::bar(void)const;
friend class B;
};
friend VS static VS member
友元函數 | 靜態成員函數 | 成員函數 | |
---|---|---|---|
訪問類的私有數據 | OK | OK | OK |
受類的作用域/許可權限制 | No | OK | OK |
必須通過對象調用 | No | No | OK |