相信大家都會有點小疑問?何為友元函式難道是friend?那麼他又是怎樣定義的呢?表現形式是什麼?關鍵字又是什麼呢?友元函式與類的成員函式區別?
下面就一一給大家介紹一下揭秘中。。。。。。。?
友元函式的定義1、c++程式設計中如果需要訪問非本類的私有成員,那麼就需要用到友元。否則私有成員是無法被外部直接訪問的,而友元可以被定義為友元函式和友元類,即指定某函式或類直接訪問私有類。則具體形式如下:c++程式設計中如果需要訪問非本類的私有成員,那麼就需要用到友元。否則私有成員是無法被外部直接訪問的,而友元可以被定義為友元函式和友元類,即指定某函式或類直接訪問私有類。則具體形式如下:
class 類名
這樣定義後友元類和友元函式就可以直接訪問該類的私有函式,需要注意的是友元僅為單向,即b是a的友元,但a是不能訪問b的私有變數,友元也不可在子類被繼承。
2、例子中友元函式直接操作類的私有變數a、b完成相加。友元函式或友元類一般使用在需要頻繁操作某類的私有變數或者對計算效率要求較高的情況下,有時時一些過載操作符也可以使用友元來完成。
估計可能有些人有點萌了,還是來個例項吧
看看友元函式到底長什麼樣子?
**如下所示
語法:宣告: friend + 普通函式宣告
class coordinate;
通過friend關鍵字直接訪問私有成員**傳如物件名而非位址
void printxy(coordinate &c)
成員函式
成員函式
class coordinate;
class circle
};測試類
int main(void){
coordinate coor(3,5);
circle
circle;//例項化
//呼叫printxy方法傳入coordinate物件
circle
.printxy(coor);
return 0;
2使用友元函式的優缺點2.2.1優點:能夠提高效率,表達簡單、清晰。
2.2.2缺點:友元函式破環了封裝機制,盡量不使用成員函式,除非不得已的情況下才使用友元函式。
3.友元函式的使用
3.1友元函式的引數:
因為友元函式沒有this指標,則引數要有三種情況:
3.1.1 要訪問非static成員時,需要物件做引數;
3.1.2 要訪問static成員或全域性變數時,則不需要物件做引數;
3.1.3 如果做引數的物件是全域性物件,則不需要物件做引數;
3.2友元函式的位置
因為友元函式是類外的函式,所以它的宣告可以放在類的私有段或公有段且沒有區別。
3.3友元函式的呼叫
可以直接調用友元函式,不需要通過物件或指標
4.友元函式和類的成員函式的區別
4.1 成員函式有this指標,而友元函式沒有this指標。
4.2 友元函式是不能被繼承的,就像父親的朋友未必是兒子的朋友。
C 之友元函式
類的友元.cpp 定義控制台應用程式的入口點。include stdafx.h include include using namespace std class point 預設賦值建構函式,在建立物件時自動呼叫 int getx 隱藏有this指標,指向當前使用的物件,其實是return thi...
C 之友元函式
1 為什麼要引入友元函式 在實現類之間資料共享時,減少系統開銷,提高效率 具體來說 為了使其他類的成員函式直接訪問該類的私有變數 即 允許外面的類或函式去訪問類的私有變數和保護變數,從而使兩個類共享同一函式 優點 能夠提高效率,表達簡單 清晰 缺點 友元函式破環了封裝機制,盡量不使用成員函式,除非不...
c 遠征之模板篇 友元函式 友元類
全域性函式 友元全域性函式 成員函式 友元成員函式 1 友元關係不可傳遞 2 友元關係的單向性 3 友元宣告的形式及數量不受限制。友元宣告在類的 都可以 4 友元只是封裝的補充,是迫不得已的使用方法,可以通過設計的巧妙性,避免使用友元。它破壞了資料的封裝。include using namespac...