當前位置:
首頁 > 知識 > c++中友元函數理解與使用

c++中友元函數理解與使用

在學習c++這一塊,關於友元函數和友元類,感覺還是不好理解,但是井下心來,理解,需要把我一下幾點。

首先講友元函數。

(1)友元函數:

1)C++中引入友元函數,是為在該類中提供一個對外(除了他自己意外)訪問的窗口;

2)這個友元函數他不屬於該類的成員函數,他是定義在類外的普通函數,只是在類中聲明該函數可以直接訪問類中的private或者protected成員。

使用友元函數聲明的一般形式:

friend <返回類型> <函數名> (<參數列表>);

使用友元函數注意的要點:

1,類中通過使用關鍵字friend 來修飾友元函數,但該函數並不是類的成員函數,其聲明可以放在類的私有部分,也可放在共有部分。友元函數的定義在類體外實現,不需要加類限定。

2,一個類中的成員函數可以是另外一個類的友元函數,而且一個函數可以是多個類友元函數。

3,友元函數可以訪問類中的私有成員和其他數據,但是訪問不可直接使用數據成員,需要通過對對象進行引用。

4,友元函數在調用上同一般函數一樣,不必通過對對象進行引用。

例如如下形式:這裡解釋上面的1,3,4要點的使用,加以理解。

#include <iostream>

#include <cstring>

using namespace std;

class persion{

public:

persion(char *pn);

//友元函數;

//注意,參數列表中一般會有一個引用類型的形參,原因參考上面的使用要點3和4;

friend void setweigth(persion &p,int h);

void disp(); //類成員函數

private:

char name[20];

int weigth,age;

};

persion::persion(char *pn) //構造函數

{

strcpy(name,pn);

weigth=0;

}

void persion::disp()

{

cout<<name<<"--"<<weigth<<endl;

}

//友元函數的具體實現:這裡沒有類限定例如 (perion::setweigth)這種形式,這裡可以與上面的disp()做個對比,一個屬於類的成員,有限定,不屬於類的成員函數,沒有加限定。

void setweigth(persion &pn,int w)

{

strcpy(pn.name,pn);//實現字元串複製

pn.weigth=w; //私有成員數據賦值

}

void main()

{

persion p("zhansan");

//調用實現setweigth(),與一般函數調用一致。

setweigth(p,60);

p.disp(); //調用類的成員函數。

}

關於要點2的使用,我給出一段代碼案例:

#include <iostream>

#include <cstring>

using namespace std;

class wheel;

class car{

public:

car(char *pn);

void run(wheel &w); //成員函數,做成wheel類中友元函數實現

private:

char name[20];

};

car::car(char *pn)

{

strcpy(name,pn);

}

class wheel{

public:

wheel(int s);

friend void car::run(wheel &w); //這裡把car類的成員函數做了友元函數。

private:

int speed;

};

wheel::wheel(int s)

{

speed=s;

}

int main(int argc, char const *argv[])

{

wheel w(60);

car c("New car");

c.run(w);

return 0;

}

void car::run(wheel &w) //car類成員函數的實現

{

cout<<"the car is running"<<endl;

cout<<"name: "<<name<<" speed :"<<w.speed<<endl;

}

{!-- PGC_COLUMN --}

本文轉載自:https://blog.csdn.net/qq_26337701/article/details/53996104

作者:天王蓋地虎626

c++中友元函數理解與使用

打開今日頭條,查看更多圖片
喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

使用 ale.js 製作一個小而美的表格編輯器
資深程序員參加面試因穿著被認為是新手,拿下帽子後,被當場錄取

TAG:程序員小新人學習 |