c++中私有變數對外部類是不能直接訪問的,也是不能繼承的。
使用友元類可以訪問類中的私有方法、私有變數,雖然對類的封裝有一定的破壞,但是有時也是很實用的。
在實際中,在修改已有**時,為了不大改動已有**:
(1) 對於沒有繼承關係的類,如果有關聯,使用友元類還是比較方便的。
(2) 對於有繼承關係的類,如果有關聯,可以將變數訪問由private改為protected。
直接看**例子:
a.h
1 #include2//注意: 該類檔案中, 不要包含b.h, 否則會報錯34
//注意: 由於不是同乙個命名空間, 這裡申明一下class b2
5namespace
st19}10
11class
a
1617
private:18
void
_inner_print()
2122
//注意: 申明友元類, 方便兩個類中可以直接訪問private變數, 函式
23 friend class
b1;
24 friend class
::st1::st2::b2;
2526 };
b.h
1 #include "a.h"23
//定義b1
4class
b1
1112
private:13
a a;
14};
1516
//定義b2
17namespace
st1
2728
private:29
a a;
30};
3132
}33 }
測試檔案main.cpp
1 #include 2 #include "b.h"34
intmain()
輸出:
call b1 printa print function
a print _inner_print
call b2 print
a print function
a print _inner_print
friend 友元函式友元類
這篇是引用,具體是引用哪位的博主不查了 僅供自己回顧複習用 friend 型別 函式名 形式引數 友元函式的宣告可以放在類的私有部分,也可以放在公有部分,它們是沒有區別的,都說明是該類的乙個友元函式。乙個函式可以是多個類的友元函式,只需要在各個類中分別宣告。友元函式的呼叫與一般函式的呼叫方式和原理一...
C 之friend友元(友元函式和友元類)
在c 中,類具有封裝性和隱蔽性,類的資料成員一般都定義為私有成員,成員函式一般都定義為公有的,以此提供類與外界的通訊介面。但是,某些成員函式頻繁呼叫時,由於函式引數的傳遞 c 嚴格的型別檢查和安全性檢查將帶來時間的開銷,為了解決這個問題,c 提出了使用友元作為實現這一要求的輔助手段。友元不是類的成員...
C 友元函式 友元類 friend關鍵字
一 友元函式 1 友元函式允許在類外訪問該類中的任何成員,使用關鍵字friend說明。通過友元乙個普通函式或類的成員函式可以訪問封裝於另乙個類中的資料。從一定程度上講,友元是對資料隱藏和封裝的破壞,但是為了資料共享和提高程式的效率與可讀性,小的破壞是必要的。友元函式不屬於該類的成員函式,它是定義在類...