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

C++中成員函數(shù)和友元函數(shù)的使用及區(qū)別詳解

 更新時(shí)間:2022年01月26日 16:16:56   作者:夜貓子~~~  
大家好,本篇文章主要講的是C++中成員函數(shù)和友元函數(shù)的使用及區(qū)別詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下

為什么使用成員函數(shù)和友元函數(shù)

這個(gè)問題至關(guān)重要,直接影響著后面的理解:

程序數(shù)據(jù): 數(shù)據(jù)是程序的信息,會(huì)受到程序函數(shù)的影響。封裝是面向?qū)ο缶幊讨械陌褦?shù)據(jù)和操作數(shù)據(jù)的函數(shù)綁定在一起的一個(gè)概念,這樣能避免受到外界的干擾和誤用,從而確保了安全。

數(shù)據(jù)封裝引申出了另一個(gè)重要的 OOP 概念,即 數(shù)據(jù)隱藏 。數(shù)據(jù)封裝 是一種把數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)捆綁在一起的機(jī)制, 數(shù)據(jù)抽象 是一種僅向用戶暴露接口而把具體的實(shí)現(xiàn)細(xì)節(jié)隱藏起來的機(jī)制。C++ 通過創(chuàng)建類來支持封裝和數(shù)據(jù)隱藏(public、protected、private)。我們已經(jīng)知道,類包含私有成員(private)、保護(hù)成員(protected)和公有成員(public)成員。默認(rèn)情況下,在類中定義的所有項(xiàng)目都是私有的。
由于C++的封裝和隱藏特性,只有類定義的成員函數(shù)可以訪問類定義的私有數(shù)據(jù)。

成員函數(shù)是數(shù)據(jù)封裝和數(shù)據(jù)隱藏的機(jī)制。

友元是C++提供的一種破壞數(shù)據(jù)封裝和數(shù)據(jù)隱藏的機(jī)制。

成員函數(shù)的使用

首先先看代碼

class Stock{ //class declaration
private:
    std:: string company;
    long shares;
    double share_val;
    double total_val;
void set_tot(){ total_val=shares* share_val;}
public:
void acquire(const std:: string & co, long n, double pr);
void buy(long num, double price);
void se11(long num, double price);
void update(double price);
void show();
};//note semicolon at the end

注意這里面的private可以不寫,如果不寫的話默認(rèn)是私有的。
其中,company、shares等都是Stock類的私有數(shù)據(jù)成員。如果試圖使用非成員函數(shù)訪問這些數(shù)據(jù)成員編譯器禁止這樣做。如果試圖破解該機(jī)制,友元是另一種選擇。

實(shí)現(xiàn)類成員函數(shù)
(1)定義成員函數(shù)時(shí),使用作用域解析運(yùn)算符(::)來標(biāo)識(shí)函數(shù)所屬的類;

void Stock::update(double price)

(2)類方法可以訪問類的private組件。

友元

C++是從結(jié)構(gòu)化的C語言發(fā)展而來的,需要照顧結(jié)構(gòu)化設(shè)計(jì)程序員的習(xí)慣,所以在對私有成員可訪問范圍的問題上不可限制太死。
C++設(shè)計(jì)者認(rèn)為,如果有的程序員真的非常怕麻煩,就是想在類的成員函數(shù)外部直接訪問對象的私有成員,那還是做一點(diǎn)妥協(xié)以滿足他們的愿望為好,這也算是眼前利益和長遠(yuǎn)利益的折中。因此,C++就有了友元(friend)的概念。打個(gè)比方,這相當(dāng)于是說:朋友是值得信任的,所以可以對他們公開一些自己的隱私。
友元提供了一種普通函數(shù)或者類成員函數(shù)訪問另一個(gè)類中的私有或保護(hù)成員的機(jī)制。也就是說有兩種形式的友元:
(1)友元函數(shù):普通函數(shù)對一個(gè)訪問某個(gè)類中的私有或保護(hù)成員。
(2)友元類:類A中的成員函數(shù)訪問類B中的私有或保護(hù)成員。
(3)友元成員函數(shù)

友元函數(shù)
創(chuàng)建友元函數(shù)的第一步是將其原型放在類聲明中,并在原型聲明前加上關(guān)鍵字friend:

friend Time operator*(double m,constTime&t);

注意該聲明可以在類外也可以在類中
這樣即使operator不是成員函數(shù) ,但它與成員函數(shù)的訪問權(quán)限相同,可以訪問類中的私有變量。

友元類
類Y的所有成員函數(shù)都為類X友元函數(shù)

class girl;
class girl{
private:
  char *name;
  int age;
  friend boy; //聲明類boy是類girl的友元
};
class boy{
public:
  void disp(girl &);
};
void boy::disp(girl &x) //函數(shù)disp()為類boy的成員函數(shù),也是類girl的友元函數(shù)
{
    //借助友元,在boy的成員函數(shù)disp中,借助girl的對象,直接訪問girl的私有變量
   cout<<"girl's name is:"<<x.name<<",age:"<<x.age<<endl;
}

成員函數(shù)作友元
類Y的一個(gè)成員函數(shù)為類X的友元函數(shù)
目的:使類Y的一個(gè)成員函數(shù)成為類X的友元,具體而言:在類Y的這個(gè)成員函數(shù)中,借助參數(shù)X,可以直接使用X的私有變量
語法:聲明在公有中 (本身為函數(shù))
聲明:friend + 成員函數(shù)的聲明
調(diào)用:先定義Y的對象y—使用y調(diào)用自己的成員函數(shù)—自己的成員函數(shù)中使用了友元機(jī)制

class Stock{ //class declaration
private:
    std:: string company;
    long shares;
    double share_val;
    double total_val;
void set_tot(){ total_val=shares* share_val;}
public:
void acquire(const std:: string & co, long n, double pr);
void buy(long num, double price);
void se11(long num, double price);
void update(double price);
void show();
};
class Market{
    friend void Stock::acquire(const std:: string & co, long n, double pr);
    //Stock類下的acquire可以作為該成員函數(shù)的友元函數(shù),可以訪問該類的私有變量
    int price;
    int fiture;
public:
    void stuff();
};

如代碼所示,Stock類下的acquire函數(shù)作為Market的友元函數(shù)可以訪問market類的私有變量。

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

友元函數(shù)和類的成員函數(shù)的區(qū)別成員函數(shù)有this指針,而友元函數(shù)沒有this指針。友元函數(shù)是不能被繼承的,就像父親的朋友未必是兒子的朋友。

總結(jié)

到此這篇關(guān)于C++中成員函數(shù)和友元函數(shù)的使用及區(qū)別詳解的文章就介紹到這了,更多相關(guān)C++成員函數(shù)和友元函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中stack容器的使用

    C++中stack容器的使用

    本文主要介紹了C++中stack容器的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • C++模板的特化超詳細(xì)精講

    C++模板的特化超詳細(xì)精講

    最近我學(xué)習(xí)了C++中的模板相關(guān)知識(shí),模板是泛型編程的基礎(chǔ),十分重要。所以特意整理出來一篇文章供我們一起復(fù)習(xí)和學(xué)習(xí)
    2022-08-08
  • 一文帶你探索C++中類型轉(zhuǎn)換的奧秘

    一文帶你探索C++中類型轉(zhuǎn)換的奧秘

    C++?提供了四種類型轉(zhuǎn)換方式,幫助我們在不同數(shù)據(jù)類型之間進(jìn)行有效的數(shù)據(jù)傳遞和操作,這些類型轉(zhuǎn)換方式在不同的場景下有各自的優(yōu)勢和適用性,下面我們就來深入了解一下吧
    2023-10-10
  • C++中String增刪查改模擬實(shí)現(xiàn)方法舉例

    C++中String增刪查改模擬實(shí)現(xiàn)方法舉例

    這篇文章主要給大家介紹了關(guān)于C++中String增刪查改模擬實(shí)現(xiàn)方法的相關(guān)資料,String是C++中的重要類型,程序員在C++面試中經(jīng)常會(huì)遇到關(guān)于String的細(xì)節(jié)問題,甚至要求當(dāng)場實(shí)現(xiàn)這個(gè)類,需要的朋友可以參考下
    2023-11-11
  • Objective-C不帶加減號(hào)的方法實(shí)例

    Objective-C不帶加減號(hào)的方法實(shí)例

    顯而易見的事實(shí)是,Objective-C 中,+ 表示類方法,- 表示實(shí)例方法,這篇文章主要給大家介紹了關(guān)于Objective-C不帶加減號(hào)的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • C++實(shí)用庫之DNS解析的實(shí)現(xiàn)

    C++實(shí)用庫之DNS解析的實(shí)現(xiàn)

    DNS解析是一種將域名轉(zhuǎn)換為相應(yīng)的IP地址的過程,本文主要介紹了C++實(shí)用庫之DNS解析的實(shí)現(xiàn),實(shí)現(xiàn)了快速、準(zhǔn)確的域名到IP地址的轉(zhuǎn)換,感興趣的可以了解一下
    2025-03-03
  • c語言5個(gè)常用的排序算法實(shí)例代碼

    c語言5個(gè)常用的排序算法實(shí)例代碼

    這篇文章主要介紹了c語言5個(gè)常用的排序算法實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • C語言中static的作用及C語言中使用靜態(tài)函數(shù)有何好處

    C語言中static的作用及C語言中使用靜態(tài)函數(shù)有何好處

    在C語言中,static的作用有三條:一是隱藏功能,二是保持持久性功能,三是默認(rèn)初始化為0。本文重點(diǎn)給大家介紹C語言中static的作用及c語言中使用靜態(tài)函數(shù)有何好處,對本文感興趣的朋友一起看看吧
    2015-11-11
  • C語言實(shí)現(xiàn)將彩色bmp圖像轉(zhuǎn)化為灰圖、灰度圖像反色

    C語言實(shí)現(xiàn)將彩色bmp圖像轉(zhuǎn)化為灰圖、灰度圖像反色

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)將彩色bmp圖像轉(zhuǎn)化為灰圖、灰度圖像反色,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • ?C++?new?和?delete?關(guān)鍵字詳解

    ?C++?new?和?delete?關(guān)鍵字詳解

    這篇文章主要介紹了?C++?new?和?delete?關(guān)鍵字詳解,文章圍繞主題展開new?和?delete?的使用方法的介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06

最新評論

甘洛县| 喀喇| 昭平县| 高邮市| 屏南县| 台山市| 金昌市| 新营市| 兰州市| 乌鲁木齐县| 西藏| 论坛| 青龙| 新郑市| 天全县| 临泉县| 外汇| SHOW| 许昌市| 深州市| 曲靖市| 新乡市| 喀喇| 延吉市| 乐业县| 连南| 寿阳县| 重庆市| 鞍山市| 东明县| 巧家县| 固安县| 金门县| 大方县| 石林| 界首市| 北海市| 阳东县| 沅江市| 麻栗坡县| 武乡县|