欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++ 中友元函數(shù)與友元類詳解

 更新時(shí)間:2017年06月26日 14:47:43   作者:ab198604  
這篇文章主要介紹了C++ 中友元函數(shù)與友元類詳解的相關(guān)資料,需要的朋友可以參考下

C++ 中友元函數(shù)與友元類詳解

總的來(lái)說(shuō),友元分為兩類:友元函數(shù)與友元類。友元是針對(duì)類而言,它提供了一種非類的成員函數(shù)來(lái)訪問(wèn)類的非公有成員的一種機(jī)制??梢园岩粋€(gè)函數(shù)指定為某類的友元,這個(gè)函數(shù)稱為這個(gè)類的友元函數(shù)。也可以將類A指定為類B的友元,則類A是類B的友元類,類A的所有成員函數(shù)均是類B的友元函數(shù),均可以訪問(wèn)類B的非公有成員。

        友元函數(shù)的注意事項(xiàng):

        (1)友元函數(shù)不是類的成員函數(shù),在函數(shù)體中訪問(wèn)對(duì)象的成員,必須用“對(duì)象名.對(duì)象成員"方式來(lái)訪問(wèn), 友元函數(shù)可以訪問(wèn)類中的所有成員(公有,私有,保護(hù)),而一般的函數(shù)只能訪問(wèn)類的公有成員。

        (2)友元函數(shù)不受類中的訪問(wèn)權(quán)限關(guān)鍵字的限制,可以將它放在類的公有,私有,保護(hù)部分,結(jié)果均一樣。

        (3)某類的友元函數(shù)的作用域并非該類作用域,如果該友元函數(shù)是另一類的成員函數(shù),則其作用域?yàn)榱硪活惖淖饔糜颍駝t與一般函數(shù)相同。

        (4)友元函數(shù)破壞了面向?qū)ο笤O(shè)計(jì)的封裝特性。所以應(yīng)該盡量少用。

        友元類

        如果某類B的成員函數(shù)會(huì)頻繁地訪問(wèn)類A的數(shù)據(jù)成員,而類A的數(shù)據(jù)成員的private/protected限制造成了類B存取的麻煩,B只能通過(guò)A的Public的成員函數(shù)進(jìn)行間接存取。這種情況下可以將類B作為類A的友元類,即類A向類B提供私有和保護(hù)成員的訪問(wèn)權(quán)限,讓類B可以直接存取。

        友元類中的所有成員函數(shù)均可以看作是另一類的友元函數(shù)。

        友元類的聲明: friend chass 類名;

        下面是友元函數(shù)的例子

        友元函數(shù)可以在類中聲明,聲明時(shí)在函數(shù)前增加friend關(guān)鍵字,然后在類體外定義,也可以直接在類中聲明定義。這兩種方式均可。下面例子中采取的是類中聲明,類體外定義的方式。

class Point 
{ 
  friend double Distance(const Point &p1, const Point &p2); //類體中聲明 
 
public: 
  Point(int x, int y):x_(x), y_(y) 
  {}; 
 
private: 
  int x_; 
  int y_; 
}; 
 
//類體外定義友元函數(shù) 
double Distance(const Point &p1, const Point &p2) 
{ 
  double dx = p1.x_ - p2.x_; //直接訪問(wèn)類的私有成員 
  double dy = p1.y_ - p2.y_; 
  return sqrt(dx*dx+dy*dy); 
} 
 
int main() 
{ 
  Point p1(3,4); 
  Point P2(6,8); 
  cout << Distance(p1,p2) << endl; 
 
  return 0; 
} 

        下面是友元類的例子:      

class Television //電視類 
{ 
  friend class TeleController;//友元類聲明 
   
public: 
  Television(int volume, int chanel): volume_(volume), chanel_(chanel){} 
 
private: 
  int volume_; //音量 
  int chanel_; //頻道 
}; 
 
class TeleController //遙控器類 
{ 
public: //類中的每個(gè)成員函數(shù)都是電視類的友元函數(shù),都可以訪問(wèn)電視類的私有數(shù)據(jù)成員 
  void VolumeUp(Television &tv) 
  { 
    tv.volume_ += 1; //音量加1 
  } 
 
  void VolumeDown(Television &tv) 
  { 
    tv.volume_ -= 1; 
  } 
 
  void ChanelUp(Television &tv) 
  { 
    tv.chanel_ += 1; //頻道加1 
  } 
 
  void ChanelDown(Television &tv) 
  { 
    tv.chanel_ -= 1; //頻道減1 
  } 
}; 
 
 
int main() 
{ 
  Television tv(1,1); 
  TeleController tc; 
  tc.ChanelUp(tv); 
  return 0; 
} 

        友元類需要注意以下幾點(diǎn):

        (1)友元關(guān)系是單向的; 

        (2) 友元關(guān)系不能被傳遞: A是B的友元,B是C的友元,則A是C的友元,這種傳遞不成立

        (3) 友元關(guān)系不能繼承:   A是B的友元,A的派生類C也是B的友元,這是不成立的。

         感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • C語(yǔ)言中pthread_exit和pehread_join的使用

    C語(yǔ)言中pthread_exit和pehread_join的使用

    pthread_exit用于強(qiáng)制退出一個(gè)線程,pthread_join用于阻塞等待線程退出,獲取線程退出狀態(tài),本文主要介紹了C語(yǔ)言中pthread_exit和pehread_join函數(shù)的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • C語(yǔ)言庫(kù)函數(shù)qsort的使用詳解

    C語(yǔ)言庫(kù)函數(shù)qsort的使用詳解

    C語(yǔ)言庫(kù)函數(shù)中的qsort的是一個(gè)回調(diào)函數(shù),回調(diào)函數(shù)就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù),這篇文章主要介紹了C語(yǔ)言庫(kù)函數(shù)qsort的使用,需要的朋友可以參考下
    2022-06-06
  • C++11新特性中auto 和 decltype 區(qū)別和聯(lián)系

    C++11新特性中auto 和 decltype 區(qū)別和聯(lián)系

    這篇文章主要介紹了C++11新特性中auto 和 decltype 區(qū)別和聯(lián)系的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • C語(yǔ)言詳解如何實(shí)現(xiàn)順序棧

    C語(yǔ)言詳解如何實(shí)現(xiàn)順序棧

    順序棧,就是用一組地址連續(xù)的存儲(chǔ)單元來(lái)存放棧元素,然后用一個(gè)棧結(jié)構(gòu)去維護(hù)一個(gè)棧。在C中,可用動(dòng)態(tài)開辟的數(shù)組去表示,維護(hù)的棧結(jié)構(gòu)需要有一個(gè)棧底和一個(gè)棧頂指針
    2022-04-04
  • c語(yǔ)言中assert斷言用法實(shí)例詳解

    c語(yǔ)言中assert斷言用法實(shí)例詳解

    斷言是C語(yǔ)言中一種用于檢查程序中假設(shè)語(yǔ)句正確性的方法,通過(guò)使用斷言,開發(fā)人員可以在程序中插入一些條件,以確保程序的執(zhí)行滿足特定的預(yù)期,這篇文章主要給大家介紹了關(guān)于c語(yǔ)言中assert斷言用法的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • C++表達(dá)式new與delete知識(shí)詳解

    C++表達(dá)式new與delete知識(shí)詳解

    這篇文章主要為大家詳細(xì)介紹了C++表達(dá)式new與delete知識(shí)點(diǎn),學(xué)習(xí)如何動(dòng)態(tài)創(chuàng)建對(duì)象,動(dòng)態(tài)創(chuàng)建的對(duì)象與一般對(duì)象的區(qū)別,動(dòng)態(tài)創(chuàng)建的對(duì)象的初始化以及釋放動(dòng)態(tài)分配的內(nèi)存等知識(shí)點(diǎn),感興趣的朋友可以參考一下
    2016-05-05
  • C++詳細(xì)實(shí)現(xiàn)完整圖書管理功能

    C++詳細(xì)實(shí)現(xiàn)完整圖書管理功能

    隨著網(wǎng)絡(luò)技術(shù)的高速發(fā)展,計(jì)算機(jī)應(yīng)用的普及,利用計(jì)算機(jī)對(duì)圖書館的日常工作進(jìn)行管理勢(shì)在必行,本篇文章涵蓋一個(gè)圖書管理系統(tǒng)的全部實(shí)現(xiàn)代碼,大家可以查缺補(bǔ)漏,提升水平
    2022-05-05
  • Visual C++中MFC消息的分類

    Visual C++中MFC消息的分類

    標(biāo)準(zhǔn)(窗口)消息:窗口消息一般與窗口內(nèi)部運(yùn)作有關(guān),如創(chuàng)建窗口,繪制窗口,銷毀窗口,通常,消息是從系統(tǒng)發(fā)到窗口,或從窗口發(fā)到系統(tǒng)
    2012-11-11
  • 淺談c++11閉包的實(shí)現(xiàn)

    淺談c++11閉包的實(shí)現(xiàn)

    閉包有很多種定義,一種說(shuō)法是,閉包是帶有上下文的函數(shù)。說(shuō)白了,就是有狀態(tài)的函數(shù)。更直接一些,不就是個(gè)類嗎?換了個(gè)名字而已。本文將介紹c++11閉包的實(shí)現(xiàn),感興趣的同學(xué),可以參考下。
    2021-06-06
  • C語(yǔ)言實(shí)現(xiàn)將double/float 轉(zhuǎn)為字符串(帶自定義精度)

    C語(yǔ)言實(shí)現(xiàn)將double/float 轉(zhuǎn)為字符串(帶自定義精度)

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)將double/float 轉(zhuǎn)為字符串(帶自定義精度),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評(píng)論