国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

在C++中關于友元函數的進一步理解

2020-05-23 13:24:53
字體:
來源:轉載
供稿:網友

這里重新將類的成員函數的定義看一下:

百科上的認識:

類的成員函數的原型要寫在類體中,原型說明了函數的參數表和返回值類型。而函數的定義一般在類外面,也可以直接在類內部定義。前者與普通函數不同的是,實現成員函數時要指明類的名稱,具體形式為:

  • 返回值類型 類名 :函數成員名(參數表){函數體};
  • 而后者一般為一些短小的函數(5行以內),也就是內聯函數。

這里在百科上對友元函數的解釋:

友元函數是指某些雖然不是類成員卻能夠訪問類的所有成員的函數。類授予它的友元特別的訪問權。通常同一個開發者會出于技術和非技術的原因,控制類的友元和成員函數(否則當你想更新你的類時,還要征得其它部分的擁有者的同意)。

1.為什么要使用友元函數

優點:能夠提高效率,表達簡單、清晰。

也有缺點:破壞了程序的封裝性。有時候不到萬不得已的時候才使用。

代碼解釋:

#include <iostream>#include <string>using namespace std;class ca {  string id;  void setId(string s) {    id = s;  }protected:  string name;  void setName(string s) {    name = s;  }public:  void print() {    cout << id << " " << name << " " << endl;  }  friend void fun(ca& a);  //申明全局函數作友元,允許它訪問私有保護成員};class derive : public ca { };  //ca類的派生類void fun(ca& a) {    //作友元的函數要定義在那個類的后面  a.id = "987";    //這是ca類的私有成員  a.setName("xyz");  //這是ca類的保護成員}int main ( ){  ca a;  //a.fun(...);  //友元函數不是當前類的成員函數,所以這句編譯出錯  fun(a);  a.print();  derive d;  fun(d);  //作參數時,類型轉換為ca類  d.print();  return 0;}

運行結果:

987  xyz
987  xyz

在就是友元函數的位置:可以在類外或者類內

聲明方式:friend+普通函數聲明

實現方式:像普通函數那樣直接調用

還有一點的是:其實一些操作符的重載實現也是要在類外實現的,那么通常這樣的話,聲明為類的友元是必須滴。(這就像我學的那個坐標類,直接用操作符重載,聲明友元函數)

最后一個知識點:

友元函數和類的成員函數的區別:

1.成員函數有this指針,而友元函數沒有this指針。

2.友元函數是不能被繼承的,就像父親的朋友未必是兒子的朋友。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VEVB武林網的支持。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉兴市| 嫩江县| 衡水市| 河池市| 泸水县| 兴仁县| 武穴市| 陈巴尔虎旗| 伊春市| 玛多县| 裕民县| 开远市| 青川县| 柘城县| 齐齐哈尔市| 玛多县| 万源市| 镶黄旗| 六盘水市| 凤山县| 巴马| 广水市| 长春市| 盈江县| 红桥区| 连云港市| 西畴县| 称多县| 三台县| 库车县| 鸡西市| 泗洪县| 湟源县| 德江县| 合江县| 余干县| 镇远县| 墨脱县| 徐水县| 库尔勒市| 深水埗区|