亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 關(guān)于C++中的友元

關(guān)于C++中的友元 時(shí)間:2017-10-26      來(lái)源:未知

1. 起源:

類(lèi)實(shí)現(xiàn)了數(shù)據(jù)的隱藏與封裝,類(lèi)的數(shù)據(jù)成員一般定義為私有成員,僅能通過(guò)類(lèi)的成員函數(shù)才能讀寫(xiě)。如果數(shù)據(jù)成員定義為公共的,則又破壞了封裝性。但是某些情況下,需要頻繁讀寫(xiě)類(lèi)的數(shù)據(jù)成員,特別是在對(duì)某些成員函數(shù)多次調(diào)用時(shí),由于參數(shù)傳遞、類(lèi)型檢查和安全性檢查等都需要時(shí)間開(kāi)銷(xiāo),而影響程序的運(yùn)行效率。

2. 概念:

友元是一種定義在類(lèi)外部的普通函數(shù),但他需要在類(lèi)體內(nèi)進(jìn)行說(shuō)明,為了和該類(lèi)的成員函數(shù)加以區(qū)別,在說(shuō)明時(shí)前面加以關(guān)鍵字friend。友元不是成員函數(shù),但是他能夠訪問(wèn)類(lèi)中的私有成員。友元的作用在于提高程序的運(yùn)行效率,但是,他破壞了類(lèi)的封裝性和隱藏性,使得非成員函數(shù)能夠訪問(wèn)類(lèi)的私有成員。導(dǎo)致程序維護(hù)性變差,因此使用友元要慎用。

友元較為實(shí)際的應(yīng)用是在運(yùn)算符重載,這種應(yīng)用可以提高軟件系統(tǒng)的靈活性

3. 分類(lèi):友元函數(shù)、友元成員、友元類(lèi)

4. 友元函數(shù):

1)概念:是一種說(shuō)明在類(lèi)定義體內(nèi)的非成員函數(shù)

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

3)說(shuō)明:

A. 友元函數(shù)是在類(lèi)中說(shuō)明的一個(gè)函數(shù),它不是該類(lèi)的成員函數(shù),但可以訪問(wèn)該類(lèi)的所有成員,它是獨(dú)立于任何類(lèi)的一般的外界函數(shù)。

B. 由于不是類(lèi)的成員,所以沒(méi)有this指針,訪問(wèn)該類(lèi)的對(duì)象的成員時(shí)必須使用對(duì)象名,而不能直接使用類(lèi)的成員名。

C. 雖然友元函數(shù)是在類(lèi)中說(shuō)明的,但其名字的作用域在類(lèi)外,作用域的開(kāi)始點(diǎn)在說(shuō)明點(diǎn),結(jié)束點(diǎn)和類(lèi)名相同

【案例1】

#include <iostream>

#include <string.h>

//普通函數(shù)可以訪問(wèn)類(lèi)中的私有成員

using namespace std;

class Grade

{

public:

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

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

private:

    int chinese;

    int math;

};

void show(Grade &gr)//友元函數(shù)的實(shí)現(xiàn)

{

    cout << "chinese: " << gr.chinese << endl;//沒(méi)有this,只能用對(duì)象調(diào)用

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

}

int main()

{

    Grade gr(89, 90);

    show(gr);//友元函數(shù)的調(diào)用

    return 0;

}

5. 友元類(lèi):

1)概念:某個(gè)類(lèi)可以是另一個(gè)類(lèi)的友元,這樣作為友元的類(lèi)中的所有成員函數(shù)都可以訪問(wèn)另一個(gè)類(lèi)中的私有成員。

2)格式:friend class 類(lèi)名;

【案例2】

#include <iostream>

#include <string.h>

//其他類(lèi)的所有成員函數(shù)都可以訪問(wèn)此類(lèi)的私有成員:Boy類(lèi)中的成員函數(shù)disp可以訪問(wèn)Girl類(lèi)中的成員

using namespace std;

class Boy;//在類(lèi)Name中需要使用類(lèi)Grade,so先聲明

class Girl

{

public:

    Girl(char *n)

    {

        strcpy(name, n);

    }

private:

    char name[32];

    friend class Boy;//類(lèi)Grade是類(lèi)Name的友元,so在類(lèi)grade中可以使用類(lèi)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)特點(diǎn):

A. 友元關(guān)系不能被繼承。

B. 友元關(guān)系是單向的,不具有交換性。若類(lèi)B是類(lèi)A的友元,類(lèi)A不一定是類(lèi)B的友元,要看在類(lèi)中是否有相應(yīng)的聲明。

C. 友元關(guān)系不具有傳遞性。若類(lèi)B是類(lèi)A的友元,類(lèi)C是B的友元,類(lèi)C不一定是類(lèi)A的友元,同樣要看類(lèi)中是否有相應(yīng)的申明

6. 友元成員函數(shù):

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

2)格式:friend 類(lèi)名 :: 成員函數(shù)名;

【案例3】

#include <iostream>

#include <string.h>

//其他類(lèi)的一個(gè)成員函數(shù)都可以訪問(wèn)此類(lèi)的私有成員:Boy類(lèi)中的成員函數(shù)disp可以訪問(wèn)Girl類(lèi)中的成員

using namespace std;

class Girl;//在類(lèi)Name中需要使用類(lèi)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類(lèi)中的成員函數(shù)為友元函數(shù)

                                   //可以訪問(wèn)Girl類(lèi)中的成員

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的使用

下一篇:匿名共享內(nèi)存

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專(zhuān)線:010-82525158 企業(yè)培訓(xùn)洽談專(zhuān)線:010-82525379 院校合作洽談專(zhuān)線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見(jiàn)科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 韩国三级m mp4 | 精品久久免费视频 | 欧美亚洲一区二区三区 | 天天干天天玩天天操 | 欧美视频综合 | 国产高清大尺度一区二区不卡 | 久久久久久久久久久久福利 | 欧美人与物videos另类3d | 黄色大片国产 | xxx69视频| 青青草免费在线观看视频 | 久精品在线| 中文字幕日韩欧美一区二区三区 | 中文字幕在线天堂 | 亚洲天天更新 | 亚洲综合色婷婷 | 欧美性猛交xxxx免费看久久 | 免费a在线观看 | 欧美黑人巨大videos在线 | 亚洲天堂免费 | 日本黄色一级片视频 | 国产一级内谢a级高清毛片 国产一级三级三级在线视 国产一级视频久久 | 精品孕妇一区二区三区 | 中文字幕日韩一区二区不卡 | a级国产精品片在线观看 | 天天碰天天干 | 久草网在线| 中国人与黑人xxxx视频 | 中文字幕aⅴ在线视频 | 两性色午夜视频免费播放 | 久久这里只有精品66 | 欧美激情在线观看一区二区三区 | 高清波多野结衣一区二区三区 | 欧美亚洲一区二区三区 | 亚洲www在线| 欧美精品一区二区三区免费播放 | 国产成人a在一区线观看高清 | 日韩永久在线观看免费视频 | 久久99精品视频 | 在线日本看片免费人成视久网 | 天天摸日日碰天天看免费 |