C++深入探究友元使用
友元
友元 friend 機(jī)制允許一個(gè)類授權(quán)其他的函數(shù)訪問它的非公有成員.
友元聲明以關(guān)鍵字 friend 開頭 ,它只能出現(xiàn)在類的聲明中, 它們不受其在類體中的 public private 和
protected 區(qū)的影響.
友元分為外部函數(shù)友元, 成員函數(shù)友元,類友元。
特點(diǎn)
不具有對稱性:A 是 B 的友元, 并不意味著 B 是A的友元
不具有傳遞性:A是B的友元, B是C的友元, 但A不是C的友元。
不具有繼承性: Base 類型繼承 Object類型, 如果Object 類型是A的友元,但Base類型不是A友元。
外部函數(shù)友元
示例
需要在類中進(jìn)行對其進(jìn)行聲明,則可以訪問類的所有成員
class Int { int value; public: Int(int x = 0):value(x) { cout<<"Create Int: "<<this<<endl; } ~Int(){ cout<<"Destroy Int: "<<this<<endl;} friend void Print(const Int &it); // 注冊為類的友元函數(shù) }; void Print(const Int &it) { cout<<it.value<<endl; } int main() { Int a(10); Print(a); return 0; }
成員函數(shù)友元
將一個(gè)成員函數(shù)聲明成友元的時(shí),必須要指明該成員函數(shù)屬于哪個(gè)類:
class Object; // 類的聲明 class Int { friend void Object::Print(const Int &it); // 注冊為成員函數(shù)友元 private: int value; public: Int(int x = 0):value(x){ cout<<"Create Int: "<<this<<endl;} ~Int(){ cout<<"Destroy Int: "<<this<<endl;} }; class Object { public: void Print(const Int &it) { cout<<it.value<<endl; } }; int main() { Int a(10); Object obj; obj.Print(a); return 0; }
總結(jié)
1.友元函數(shù)不是類的成員函數(shù),在函數(shù)體中訪問對象的成員,必須用對象名加運(yùn)算符“.”加對象成員名。但友元函數(shù)可以訪問類中的所有成員,一般函數(shù)只能訪問類中的公有成員。
2.友元函數(shù)不受類中的訪問權(quán)限關(guān)鍵字限制,可以把它放在類的公有、私有、保護(hù)部分,但結(jié)果一樣。
3.某類的友元函數(shù)的作用域并非該類作用域。如果該友元函數(shù)是另一類的成員函數(shù),則其作用域?yàn)榱硪活惖淖饔糜?,否則與一般函數(shù)相同。
類友元
整個(gè)類可以是另一個(gè)類的友元。友元類的每個(gè)成員函數(shù)都是另一個(gè)類的友元函數(shù),都可訪問另一個(gè)
類中的所以成員,共有,保護(hù)或私有數(shù)據(jù)成員
class Object; // 類的聲明 class Int { friend class Object; // 注冊為類友元 private: int value; public: Int(int x = 0):value(x){ cout<<"Create Int: "<<this<<endl;} ~Int(){ cout<<"Destroy Int: "<<this<<endl;} }; class Object { public: void Print(const Int &it) { cout<<it.value<<endl; } }; int main() { Int a(10); Object obj; obj.Print(a); return 0; }
到此這篇關(guān)于C++深入探究友元使用的文章就介紹到這了,更多相關(guān)C++友元內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)不能被繼承的類實(shí)例分析
這篇文章主要介紹了C++實(shí)現(xiàn)不能被繼承的類實(shí)例分析,對于C++初學(xué)者而言可以通過本文實(shí)例更好的理解類的原理及運(yùn)用,需要的朋友可以參考下2014-08-08