最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年12月14日 09:42:50   作者:Struggler09  
今天小編就為大家分享一篇關于在C++中關于友元函數的進一步理解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

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

百科上的認識:

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

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

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

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

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

優(yōu)點:能夠提高效率,表達簡單、清晰。

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

代碼解釋:

#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+普通函數聲明

實現(xiàn)方式:像普通函數那樣直接調用

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

最后一個知識點:

友元函數和類的成員函數的區(qū)別:

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

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內容請查看下面相關鏈接

相關文章

  • C++實現(xiàn)單張圖片讀取和保存

    C++實現(xiàn)單張圖片讀取和保存

    這篇文章主要為大家詳細介紹了C++語言讀取和保存單張圖片的代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • c++實現(xiàn)通用參數解析類示例

    c++實現(xiàn)通用參數解析類示例

    使用命令行執(zhí)行程序的時候在程序后可跟多個參數列表,而main函數的argc和argv分別存儲了相關的參數個數和參數內容,而循環(huán)輸入相關的時候就需要用戶自己來解析相關參數。以下代碼用c++的方式實現(xiàn)了相關解析的封裝,使用起來非常方便
    2014-03-03
  • C++實現(xiàn)完整功能的通訊錄管理系統(tǒng)詳解

    C++實現(xiàn)完整功能的通訊錄管理系統(tǒng)詳解

    來了來了,通訊錄管理系統(tǒng)踏著七彩祥云飛來了,結合前面的結構體知識和分文件編寫方法,我總結并碼了一個帶菜單的通訊錄管理系統(tǒng),在這篇文章中將會提到C的清空屏幕函數,嵌套結構體具體實現(xiàn),簡單且充實,跟著我的思路,可以很清晰的解決這個項目
    2022-05-05
  • C語言實現(xiàn)刮刮樂效果是示例代碼

    C語言實現(xiàn)刮刮樂效果是示例代碼

    這篇文章主要為大家詳細介紹了如何C語言模擬實現(xiàn)刮刮樂的效果,只要按下鼠標左鍵并移動就可以刮開刮卡層,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-01-01
  • C++面試之你知道有哪些可執(zhí)行體嗎

    C++面試之你知道有哪些可執(zhí)行體嗎

    可執(zhí)行體其實也叫可調用對象,這也是面試常常會考到的問題,這篇文章就來和大家詳細講講C++中的可執(zhí)行體,感興趣的小伙伴可以了解一下
    2023-06-06
  • c與c++之間的相互調用及函數區(qū)別示例詳解

    c與c++之間的相互調用及函數區(qū)別示例詳解

    這篇文章主要為大家介紹了c與c++相互調用的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • C++實現(xiàn)LeetCode(209.最短子數組之和)

    C++實現(xiàn)LeetCode(209.最短子數組之和)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(209.最短子數組之和),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • C++之關于string對象的大小比較

    C++之關于string對象的大小比較

    這篇文章主要介紹了C++之關于string對象的大小比較方式,具有很好的 參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • VSCode同時更改所有相同的變量名或類名的圖文教程

    VSCode同時更改所有相同的變量名或類名的圖文教程

    這篇文章主要介紹了VSCode同時更改所有相同的變量名或類名,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • C語言智能指針之weak_ptr淺析

    C語言智能指針之weak_ptr淺析

    這篇文章主要介紹了 C++11智能指針之weak_ptr詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10

最新評論

历史| 泾川县| 邛崃市| 台东市| 迁安市| 平利县| 扎鲁特旗| 依兰县| 安丘市| 屏东市| 新干县| 潼关县| 卓资县| 革吉县| 西城区| 井研县| 东源县| 珠海市| 萨嘎县| 香港| 鄂托克旗| 金坛市| 囊谦县| 和林格尔县| 莱阳市| 大连市| 久治县| 剑川县| 庄浪县| 盐城市| 万山特区| 开鲁县| 涞水县| 巴林左旗| 黄平县| 惠州市| 宣恩县| 新野县| 临海市| 赤城县| 鄂尔多斯市|