友元介紹
友元是一種允許非類成員函式
訪問類的非公有成員
的一種機制。
友元函式
說明友元函式在類作用域外定義,但它需要在類體中進行說明
為了與該類的成員函式加以區別,定義的方式是在類中用關鍵字friend說明該函式,格式如下:
friend 型別 友元函式名(參數列);
友元的作用在於提高程式的執行效率
#include #includeusing
namespace
std;
class
point
private
:
intx_;
inty_;
};double distance(point &p1, point &p2)
int main(void
)
友元函式注意事項
友元函式不是類的成員函式,在函式體中訪問物件的成員,必須用物件名加運算子「.」加物件成員名。但友元函式可以訪問類中的所有成員(公有的、私有的、保護的),一般函式只能訪問類中的公有成員。
友元函式不受類中的訪問許可權關鍵字限制,可以把它放在類的公有、私有、保護部分,但結果一樣。
某類的友元函式的作用域並非該類作用域。如果該友元函式是另一類的成員函式,則其作用域為另一類的作用域,否則與一般函式相同。
友元函式破壞了物件導向程式設計類的封裝性,所以友元函式如不是必須使用,則盡可能少用
。或者用其他手段保證封裝性。
友元類
說明如果某類b的成員函式會頻繁的訪問另乙個類a的資料成員, 而a的資料成員的private/protectd限制造成b訪問的麻煩, b只能通過a的public的成員函式進行間接訪問
把b做成a類的友元類,即a類向b類開發其private/protectd內容, 讓b直接訪問
友元類:乙個類可以作另乙個類的友元
友元類的所有成員函式都是另乙個類的友元函式
友元類的聲名:
friend class
類名;
#include usingnamespace
std;
class
television
private
:
intvolume_;
intchannel_;
};class
telecontroller
void setchannel(television &tv, int
channel)
};int main(void
)
有元類注意事項
友元關係是單向的(a->b,b-×>a)
友元關係不能被傳遞(a->b,b->c,a-×>c)
友元關係不能被繼承(a->b,c inherit a,c-×>a)
C 學習筆記07
友元是一種定義在類外部的普通函式或類,需要在類中宣告,基本格式為friend 函式原型,友元不是成員函式,但它可以訪問類中的私有成員 存在形式 特點運算子過載,就是對已有的運算子重新進行定義,賦予其另一種功能,以適應不同的資料型別。過載規則 不能過載的運算子 過載形式 由於現階段時間不夠,這些運算子...
學習筆記07
2017年9月26日 學習筆記與總結 1.盒子模型簡介 margin 當前元素和相鄰元素之間的距離 分四個方向,按順時針方向 top right bottom left 特點 1.垂直方向的相鄰元素,上下外邊距只會取最大值 2.在子元素裡新增垂直方向的外邊距,需要給父元素新增 overflow hi...
學習筆記07
概述 在程式設計中,為了方便處理資料具有相同型別的若干變數按有序形式組織起來 稱為陣列。include 變數定義 資料型別 變數 值 陣列定義 資料型別 陣列名 元素個數 int array 10 陣列 陣列下標 陣列名 下標 printf d n arr 0 printf d n arr 1 pr...