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

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

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

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

總的來說,友元分為兩類:友元函數(shù)與友元類。友元是針對類而言,它提供了一種非類的成員函數(shù)來訪問類的非公有成員的一種機(jī)制。可以把一個函數(shù)指定為某類的友元,這個函數(shù)稱為這個類的友元函數(shù)。也可以將類A指定為類B的友元,則類A是類B的友元類,類A的所有成員函數(shù)均是類B的友元函數(shù),均可以訪問類B的非公有成員。

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

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

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

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

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

        友元類

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

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

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

        下面是友元函數(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_; //直接訪問類的私有成員 
  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: //類中的每個成員函數(shù)都是電視類的友元函數(shù),都可以訪問電視類的私有數(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的友元,這是不成立的。

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

相關(guān)文章

  • C++ 多線程編程建議之 C++ 對多線程/并發(fā)的支持(下)

    C++ 多線程編程建議之 C++ 對多線程/并發(fā)的支持(下)

    這篇文章主要介紹的是 C++ 多線程編程建議之 C++ 對多線程/并發(fā)的支持的相關(guān)資料,承接前文 現(xiàn)代 C++ 對多線程/并發(fā)的支持,接下來我們看看回發(fā)生什么吧
    2021-10-10
  • 詳解C語言中fseek函數(shù)和ftell函數(shù)的使用方法

    詳解C語言中fseek函數(shù)和ftell函數(shù)的使用方法

    這篇文章主要介紹了C語言中fseek函數(shù)和ftell函數(shù)的使用方法,兩個函數(shù)分別用于設(shè)置和返回文件指針stream的位置,需要的朋友可以參考下
    2016-03-03
  • 基于C語言實(shí)現(xiàn)推箱子游戲

    基于C語言實(shí)現(xiàn)推箱子游戲

    這篇文章主要為大家詳細(xì)介紹了基于C語言實(shí)現(xiàn)推箱子游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C++封裝遠(yuǎn)程注入類CreateRemoteThreadEx實(shí)例

    C++封裝遠(yuǎn)程注入類CreateRemoteThreadEx實(shí)例

    這篇文章主要介紹了C++封裝遠(yuǎn)程注入類CreateRemoteThreadEx實(shí)例,詳細(xì)講述了注入DLL到指定的地址空間以及從指定的地址空間卸載DLL的方法,需要的朋友可以參考下
    2014-10-10
  • C++數(shù)據(jù)結(jié)構(gòu)之堆詳解

    C++數(shù)據(jù)結(jié)構(gòu)之堆詳解

    本文詳細(xì)講解了C++數(shù)據(jù)結(jié)構(gòu)之堆,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • 函數(shù)指針的一些概念詳解

    函數(shù)指針的一些概念詳解

    首先看函數(shù)指針的語法,舉一個最簡單的例子,要創(chuàng)建一個函數(shù)指針,則它與它指向的函數(shù),在參數(shù)個數(shù)類型以及返回值上都保持一致,跟重載的要求應(yīng)該是一樣的
    2013-09-09
  • C語言實(shí)現(xiàn)信號槽的項(xiàng)目實(shí)踐

    C語言實(shí)現(xiàn)信號槽的項(xiàng)目實(shí)踐

    信號槽是觀察者模式的一種實(shí)現(xiàn),一個信號就是一個能夠被觀察的事件,本文主要介紹了C語言實(shí)現(xiàn)信號槽的項(xiàng)目實(shí)踐模具有一定的參考價值,感興趣的可以了解一下
    2024-04-04
  • C語言下快速排序(挖坑法)詳解

    C語言下快速排序(挖坑法)詳解

    大家好,本篇文章主要講的是C語言下快速排序(挖坑法)詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C語言實(shí)現(xiàn)班級成績管理系統(tǒng)

    C語言實(shí)現(xiàn)班級成績管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)班級成績管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C/C++中for語句循環(huán)用法以及練習(xí)舉例

    C/C++中for語句循環(huán)用法以及練習(xí)舉例

    for語句是一種循環(huán)語句,它是對while語句的推廣,下面這篇文章主要給大家介紹了關(guān)于C/C++中for語句循環(huán)用法以及練習(xí)舉例的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03

最新評論

大埔区| 宁都县| 河东区| 彭州市| 丰台区| 江华| 黔西县| 革吉县| 南澳县| 沅陵县| 中西区| 吉木乃县| 朝阳区| 清水县| 会昌县| 望谟县| 光山县| 班戈县| 马尔康县| 安新县| 庆阳市| 南皮县| 日喀则市| 灯塔市| 霍山县| 科技| 新密市| 申扎县| 醴陵市| 松阳县| 安庆市| 闽侯县| 常山县| 临清市| 佛学| 宜春市| 贡觉县| 娱乐| 巨野县| 比如县| 多伦县|