一、友元類概述
在C++中,友元是一種機制,可以在類之間共享訪問,允許類中的一個成員函數或一個類訪問另一個類的私有或受保護成員。一般而言,友元是針對類而言的,它可以是一個函數,也可以是類,是一種授權機制,即授權某些指定的類或函數訪問自己的私有成員,也可以授權其他的類或函數訪問自己所在類的私有成員。在C++中,友元可以被聲明為全局函數、類的成員函數以及類本身。
二、友元類使用場景
友元類是C++中提供的一種特殊情況,它授權一個類可以訪問另一個類的私有成員。有一些情況下,為了方便或者考慮到安全等因素,需要在類之間設定友元關係,常見的使用場景如下:
1. 子類訪問父類私有成員
一個子類必須通過繼承才能訪問父類的成員,但是私有成員是不能被繼承的,因此,如果需要在子類中訪問父類的私有成員,可以通過將子類聲明為父類的友元類實現。
class Parent{ private: int num; friend class Child; }; class Child:public Parent{ public: void show(){ cout<<"The private member of parent:"<<num<<endl; } };
2. 不同類之間共享私有成員
在某些情況下,需要在兩個不相關的類之間共享私有成員,可以使用友元類實現,一般情況下,這個友元類不需要訪問其他類的成員,只需要實現對該類私有成員的訪問即可。
class A{ private: int num; friend class B; }; class B{ public: void show(A& a){ cout<<"The private member of A:"<<a.num<<endl; } };
3. 類與非成員函數共享私有成員
有的時候,需要在類中共享私有成員給非成員函數使用,我們也可以通過將非成員函數聲明為該類的友元函數實現,這樣就可以在非成員函數中直接訪問到該類的私有成員。
class Example{ private: int num; friend void show(Example& e); }; void show(Example& e){ cout<<"The private member of Example:"<<e.num<<endl; }
三、友元類的注意事項
在使用友元類時,需要注意以下幾點:
1. 友元關係不能被繼承
如果一個類A是類B的友元類,那麼A的子類不一定是類B的友元類。如果需要將B的私有成員授權給A的子類,需要在A的子類中再次聲明友元關係。
2. 友元類不具有傳遞性
如果類A是類B的友元類,類B是類C的友元類,但是類A和類C之間並沒有友元關係,那麼類A無法訪問類C的私有成員。
3. 友元關係是單向的
如果類A是類B的友元類,那麼A可以訪問B的私有成員,但是B無法訪問A的私有成員。
四、總結
友元類是C++提供的一種機制,可以讓指定的類或函數訪問另一個類的私有成員。使用友元類可以使代碼更加靈活和安全。但是需要注意,友元關係不具有繼承性和傳遞性,且是單向的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/190962.html