今天介紹下友元,首先介紹為什麼需要友元,友元解決什麼樣的問題。
我們知道物件導向特性中封裝是將內部細節進行封裝,包括內部的私有變數,如果外部想訪問私有變數,就需要提供公有的函式進行操作。
解決的問題:在外部函式或者是類中,想訪問某個類a的內部私有成員變數或者函式,但是類a又不想提供額外的public的方法。就可以將外部函式和類做自己的友元。這樣就可以訪問a的內部私有變數了。
支援友元的原因:如果不支援友元,可能在c語言的開發者看來是非常麻煩的事情,為了讓c語言的開發者更加容易的遷移過來才支援友元。友元破壞了封裝性。
友元的分類:友元函式、友元類
普通的函式可以當做類的友元函式,這樣在函式內部可以訪問類的成員變數,**示例如下
#includeusing namespace std;
class ccar; //提前宣告ccar類,以便後面的cdriver類使用
class cdriver
;class ccar
;void cdriver::modifycar(ccar* pcar)
int mostexpensivecar(ccar cars, int total) //求最貴氣車的**
乙個類 a 可以將另乙個類 b 宣告為自己的友元,類 b 的所有成員函式就都可以訪問類 a 物件的私有成員。在類定義中宣告友元類的寫法如下:
class ccar
;class cdriver
};
在cdriver 中的成員變數 mycar ,可以直接訪問mycar的私有成員變數 price。
友元解決了封裝帶來的訪問問題,可以通過友元直接訪問類的私有成員,避免需要額外增加public的方法來操作內部變數。雖然帶來方便,但是同時違背了物件導向的特性中封裝原則。
C 類和物件 友元
全域性函式做友元可以訪問另乙個類中的私有成員,寫法就是把全域性函式複製貼上放到類中,前面再加乙個關鍵字friend include include using namespace std class building 房屋類 public string m livingroom 客廳 private...
C 物件導向 友元函式和友元類
2.友元函式的另一種實現 3.友元類 4.為什麼會有友元函式 class person void print person a 對於上面的person類,內部有private protected public的三類訪問許可權的成員。寫乙個外部函式print 來列印這三類成員,則print 可以訪問p...
C 類 友元函式和友元類
1.友元函式 2.友元類 我們知道類的私有屬性只能在類的內部訪問,能不能通過一種途徑可以在類的外部訪問?答案是有的,友元函式。a.友元函式的作用 可以在類的外部訪問類的私有屬性,但是會破壞類的封裝。b.友元函式的格式 friend 函式返回型別 函式名 引數列表 c.友元函式宣告的位置和類訪問修飾符...