色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 關于C++中的友元

關于C++中的友元 時間:2017-10-26      來源:未知

1. 起源:

類實現了數據的隱藏與封裝,類的數據成員一般定義為私有成員,僅能通過類的成員函數才能讀寫。如果數據成員定義為公共的,則又破壞了封裝性。但是某些情況下,需要頻繁讀寫類的數據成員,特別是在對某些成員函數多次調用時,由于參數傳遞、類型檢查和安全性檢查等都需要時間開銷,而影響程序的運行效率。

2. 概念:

友元是一種定義在類外部的普通函數,但他需要在類體內進行說明,為了和該類的成員函數加以區別,在說明時前面加以關鍵字friend。友元不是成員函數,但是他能夠訪問類中的私有成員。友元的作用在于提高程序的運行效率,但是,他破壞了類的封裝性和隱藏性,使得非成員函數能夠訪問類的私有成員。導致程序維護性變差,因此使用友元要慎用。

友元較為實際的應用是在運算符重載,這種應用可以提高軟件系統的靈活性

3. 分類:友元函數、友元成員、友元類

4. 友元函數:

1)概念:是一種說明在類定義體內的非成員函數

2)格式:friend 返回值類型 函數名(參數表){ 函數體 }

3)說明:

A. 友元函數是在類中說明的一個函數,它不是該類的成員函數,但可以訪問該類的所有成員,它是獨立于任何類的一般的外界函數。

B. 由于不是類的成員,所以沒有this指針,訪問該類的對象的成員時必須使用對象名,而不能直接使用類的成員名。

C. 雖然友元函數是在類中說明的,但其名字的作用域在類外,作用域的開始點在說明點,結束點和類名相同

【案例1】

#include <iostream>

#include <string.h>

//普通函數可以訪問類中的私有成員

using namespace std;

class Grade

{

public:

    Grade(int ch, int ma):chinese(ch), math(ma){}

    friend void show(Grade &gr);//友元函數的說明

private:

    int chinese;

    int math;

};

void show(Grade &gr)//友元函數的實現

{

    cout << "chinese: " << gr.chinese << endl;//沒有this,只能用對象調用

    cout << "math: " << gr.math << endl;

}

int main()

{

    Grade gr(89, 90);

    show(gr);//友元函數的調用

    return 0;

}

5. 友元類:

1)概念:某個類可以是另一個類的友元,這樣作為友元的類中的所有成員函數都可以訪問另一個類中的私有成員。

2)格式:friend class 類名;

【案例2】

#include <iostream>

#include <string.h>

//其他類的所有成員函數都可以訪問此類的私有成員:Boy類中的成員函數disp可以訪問Girl類中的成員

using namespace std;

class Boy;//在類Name中需要使用類Grade,so先聲明

class Girl

{

public:

    Girl(char *n)

    {

        strcpy(name, n);

    }

private:

    char name[32];

    friend class Boy;//類Grade是類Name的友元,so在類grade中可以使用類Name的成員

};

class Boy

{

public:

    void disp(Girl &);

};

void Boy :: disp(Girl &g)

{

    cout << "name: " << g.name << endl;

}

int main()

{

    Boy b;

    Girl g("lily");

    b.disp(g);

    return 0;

}

 

3)特點:

A. 友元關系不能被繼承。

B. 友元關系是單向的,不具有交換性。若類B是類A的友元,類A不一定是類B的友元,要看在類中是否有相應的聲明。

C. 友元關系不具有傳遞性。若類B是類A的友元,類C是B的友元,類C不一定是類A的友元,同樣要看類中是否有相應的申明

6. 友元成員函數:

1)概念:另一個類的成員函數可以作為某個類的友元,只是在聲明友元函數時要加上成員函數所在的類名。

2)格式:friend 類名 :: 成員函數名;

【案例3】

#include <iostream>

#include <string.h>

//其他類的一個成員函數都可以訪問此類的私有成員:Boy類中的成員函數disp可以訪問Girl類中的成員

using namespace std;

class Girl;//在類Name中需要使用類Grade,so先聲明

class Boy

{

public:

    Boy(int a):age(a){}

    void disp(Girl &);

private:

    int age;

};

class Girl

{

public:

    Girl(char *n)

    {

        strcpy(name, n);

    }

    friend void Boy :: disp(Girl &);//聲明Boy類中的成員函數為友元函數

                                   //可以訪問Girl類中的成員

private:

    char name[32];

};

void Boy :: disp(Girl &g)

{

    cout << "girl's name: " << g.name << endl;

    cout << "boy's age: " << age << endl;

}

int main()

{

    Boy b(22);

    Girl g("lily");

    b.disp(g);

    return 0;

}

上一篇:epoll的使用

下一篇:匿名共享內存

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 久久国产精品网站| 亚洲xxxx视频| 亚洲影视九九影院在线观看| 亚洲欧洲国产伦综合| 久久99久久99精品免观看粉嫩 | 亚洲在线观看视频| 日韩在线观看免费网站| 久久久久女教师免费一区| 国产精品爽黄69| 中文字幕精品一区二区精品| 国内免费精品永久在线视频| 91久久精品国产| 久久国产精品99国产精| 国产精品伦子伦免费视频| 在线精品视频视频中文字幕| 97久久久免费福利网址| 日韩国产精品视频| 久久久久久久国产精品视频| 亚洲国产精品福利| 欧美激情一区二区三区成人| 日韩精品久久久久久久玫瑰园| 久久久噜噜噜久久中文字免| 亚洲精品自拍视频| 日本精品一区二区三区在线播放视频 | 韩国19禁主播vip福利视频| 亚洲国产成人91精品| 久久久久久久久久久网站| 亚洲欧美一区二区三区四区| 8090理伦午夜在线电影| 中文字幕日韩有码| 91美女福利视频高清| 91chinesevideo永久地址| 欧美在线视频在线播放完整版免费观看| 亚洲精品视频播放| 欧美中文在线免费| 欧美成人在线网站| 亚洲欧洲国产精品| 成人免费网站在线看| 7777精品视频| 久久99国产精品久久久久久久久| 亚洲激情小视频|