類的主要特點之一是資料隱藏,也就是類的私有成員或保護成員只能通過它的成員函式來訪問。c++中提供友元機制解決在類外對某個物件的私有成員或保護成員進行操作。
友元函式提高了程式的執行效率,實現了類之間的資料共享,方便了程式設計。但是宣告友元函式相當於在實現封裝的黑盒子上開了乙個黑洞,如果乙個類宣告了許多友元,則相當於在黑盒子上開了許多洞,在一定程度上破壞了資料的隱蔽性和類的封裝性,降低了程式的可維護性。
宣告友元類就像把自家的鑰匙給了另乙個類,意思是你是我的朋友,我很信任你,你可以來我家,並且家裡的東西你可以隨便用。也可以理解為:設定了乙個白名單。
1. 友元函式
2. 友元類
注意:友元關係是單向的
友元關係不能傳遞
友元函式可以在類的私有部分宣告,也可以在類的共有部分進行宣告
友元函式在定義的時候,不用在函式面前加"類名::",因為它不是該類的成員函式
友元函式沒有this指標
調用友元函式時必須在它的實參表中給出要訪問的物件
友元函式不是當前類中的成員函式,它可以是乙個不屬於任何乙個類的普通函式,也可以是另乙個類的成員函式
c 遠征之模板篇 友元函式 友元類
全域性函式 友元全域性函式 成員函式 友元成員函式 1 友元關係不可傳遞 2 友元關係的單向性 3 友元宣告的形式及數量不受限制。友元宣告在類的 都可以 4 友元只是封裝的補充,是迫不得已的使用方法,可以通過設計的巧妙性,避免使用友元。它破壞了資料的封裝。include using namespac...
C 之friend友元(友元函式和友元類)
在c 中,類具有封裝性和隱蔽性,類的資料成員一般都定義為私有成員,成員函式一般都定義為公有的,以此提供類與外界的通訊介面。但是,某些成員函式頻繁呼叫時,由於函式引數的傳遞 c 嚴格的型別檢查和安全性檢查將帶來時間的開銷,為了解決這個問題,c 提出了使用友元作為實現這一要求的輔助手段。友元不是類的成員...
友元函式 友元類 友元成員
友元 友元函式 友元類和友元成員函式 c 有些情況下,允許特定的非成員函式訪問乙個類的私有成員,同時仍阻止一般的訪問,這是很方便做到的。例如被過載的操作符,如輸入或輸出操作符,經常需要訪問類的私有資料成員。友元 frend 機制允許乙個類將對其非公有成員的訪問權授予指定的函式或者類,友元的宣告以fr...