輕鬆上手C++友元函數

前言

上一章節主要是詳細介紹了const成員和static成員。不清楚的能夠回顧一下哦。本章節主要針對於C++中的友元作一個詳細介紹。編程

友元

友元(frend)機制容許一個類將對其非公有成員的訪問權授予指定的函數或者類,友元的聲明以friend開始,它只能出如今類定義的內部,友元聲明能夠出如今類中的任何地方。友元能夠是一個函數,該函數被稱爲友元函數;友元也能夠是一個類,該類被稱爲友元類,在這種狀況下,整個類及其全部成員都是友元。微信

友元函數app

友元函數的使用,由於友元函數沒有this指針,則參數要有三種狀況: 編輯器

  • 要訪問非static成員時,須要對象作參數。函數

  • 訪問static成員或全局變量時,則不須要對象作參數。學習

  • 全局對象則不須要對象作參數。測試

  • 能夠直接調用友元函數,不須要經過對象或指針。this

  • 在友元函數中對象或者指針才具備無視權限限定的特權url

測試學習代碼以下:spa

成員函數是友元函數

使類B中的成員函數成爲類A的友元函數,這樣類B的該成員函數就能夠訪問類A的全部成員了。

當用到友元成員函數時,需注意友元聲明和友元定義之間的相互依賴,在該例子中,類B必須先定義,不然類A就不能將一個B的函數指定爲友元。然而,只有在定義了類A以後,才能定義類B的該成員函數。更通常的講,必須先定義包含成員函數的類,才能將成員函數設爲友元。另外一方面,沒必要預先聲明類和非成員函數來將它們設爲友元。

以下測試代碼:

友元類

友元類的全部成員函數都是另外一個類的友元函數,均可以訪問另外一個類中的隱藏信息(包括私有成員和保護成員)。當但願一個類能夠存取另外一個類的私有成員時,能夠將該類聲明爲另外一類的友元類。

關於友元類的注意事項:

  • 友元關係不能被繼承。

  • 友元關係是單向的。

  • 友元關係不具備傳遞性。

如一下測試代碼:

尾言

容許某些特定的非成員函數訪問一個類的私有成員(及受保護成員),而同時仍阻止通常的訪問的狀況下,友元是可用的。

優勢:

1.靈活實現訪問若干類私有或受保護成員才能完成的任務;

2.便於與不支持類的語言(如C語言、彙編等)進行混合編程;

3.更天然地使用C++語言的IO流庫。

缺點:一個類將對其非公有成員的訪問權限授予其餘函數或者類,會破壞該類的封裝性,下降該類的可靠性和可維護性。



本文分享自微信公衆號 - C語言編程基礎(goodStudyCode)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索