(1)友元是c++ 中的一種關係
(2)友元關係發生在函式與類之間或者類與類之間
(3)友元關係是單向的,不能傳遞
(1)在類中以friend關鍵字宣告友元
(2)類的友元可以是其它類或者具體函式
(3)友元不是類的一部分
(4)友元不受類中訪問級別的限制
(5)友元可以直接訪問具體類的所有成員
在類中用friend關鍵字對函式或類進行宣告。
友元函式
26};
2728
double func(point& p1, point&p2)
2938
39int
main()
40友元的使用初探
(1)友元是為了兼顧 c 語言的高效而誕生的。
前面的例子中,計算兩點之間的距離,如果使用c語言開發,直接訪問結構體成員即可,效率很高。使用c++開發,如果按照一般的方式,需要多次呼叫 public 中的成員函式來訪問 private 中的成員變數,該例中就呼叫了8次 getx() / gety(),這樣就導致程式效率很低。早期的c++開發就是使用這種方式,然後被很多程式設計師所詬病,為了兼顧c語言的高效,由此誕生了友元。
(2)友元直接破壞了物件導向的封裝性,很多程式開發者將c++當作c語言使用了,將封裝性這樣的高階物件導向特性丟失了。
(3)友元在實際產品中的高效是得不償失的,在現代軟體工程開發中已經逐漸被遺棄
(1)友元關係不具備傳遞性。 a 是b 的友元,b 是c 的友元,但a 不 c 的友元。
(2)類的友元可以是其它類的成員函式
(3)類的友元可以是某個完整的類:所有的成員函式都是友元
1 #include 2友元的深入分析3class
classc410
11 friend class classb; //
b是c的友元類,即b可以任意訪問c
12};
1314
class
classb
1521
22void getclasscname(classc&c)
2326
27 friend class classa; //
a是b的友元類,即a可以任意訪問b
28};
2930
31class
classa
3238
39void getclasscname(classc&c)
4043
44void getclassbname(classb&b)
4548
};49
50int
main()
51
(1)友元是為了兼顧 c 語言的高效而誕生的
(2)友元直接破壞了物件導向的封裝性
(3)友元關係不具備傳遞性
(4)類的友元可以是其它類的成員函式
(5)類的友元可以是某個完整的類
第28課 友員的尷尬能力
友元的概念 什麼是友元?友元是c 中的一種關係 友元關係發生在函式與類之間或者類與類之間 友員關係是單向的,不能傳遞 友元的用法 在類中以friend關鍵字宣告友元 類中的友元可以是其它類或者具體的函式 友元不是類的一部分 友元不受類中訪問級別的限制 友元可以直接訪問具體類的所有成員 在類中用fri...
28 友元的尷尬能力
上一課 twophasecons ret new twophasecons 靜態成員內部,直接訪問類的私有成員?此處呼叫的是建構函式,不是普通成員變數。友元是c 中的一種關係,發生在函式與類之間或者類與類之間。友元關係是單項的,不能傳遞。在類中以friend關鍵字宣告友元,類的友元可以是其他類或者具...
28,友元的尷尬能力
1 友元是c 中的一種關係 2 友元關係發生在函式與類之間或類與類之間 3 友元關係是單項的,不能傳遞 classpointvoid func point p 全域性函式,引數是類的引用,接受乙個ponit物件p作為引數 通過引數物件名p,可以訪問point類內的任何成員!1 在類中以friend關...