第28課 友元的尷尬能力

2022-02-21 12:23:11 字數 2268 閱讀 9727

(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關...