乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      C++ 友元關系

       tianht 2016-05-31

      在封裝中C++類數(shù)據成員大多情況是private屬性;但是如果接口采用多參數(shù)實現(xiàn)肯定影響程序效率;然而這時候如果外界需要頻繁訪問這些私有成員,就不得不需要一個既安全又理想的“后門”——友元關系;

      C++中提供三種友元關系的實現(xiàn)方式,友元函數(shù)、友元成員函數(shù)、友元類。

      友元函數(shù):既將一個普通的函數(shù)在一個類中說明為一個friend屬性;其定義(大多數(shù)會訪問該類的成員)應在類后;

      友元成員函數(shù):既然是成員函數(shù),那么肯定這個函數(shù)屬于某個類,對了就是因為這個函數(shù)是另外一個類的成員函數(shù),有時候因為我們想用一個類通過一個接口去訪問另外一個類的信息,然而這個信息只能是被它授權的類才能訪問;那么也需要用friend去實現(xiàn);這個概念只是在聲明的時候稍有變化;

      友元類:友元類聲明會將整個類說明成為另一個類的友元關系;和之前兩種的區(qū)別是集體和個人的區(qū)別;友元類的所有成員函數(shù)都可以是另一個類的友元函數(shù);

      值得注意的是友元關系是單向的,有點像我們戀愛中出現(xiàn)的單相思 O(∩_∩)O,單向關系就是說如果A被說明成B的友元關系,那么只能說A是B的友元,并不代表B是A的友元;其次在多數(shù)情況下友元關系的函數(shù)都會訪問它被說明中類的成員,這時候應該將函數(shù)定義在類的后面;

      下面給一個簡單的例程代碼;

       

      復制代碼
       1 #include <iostream>
       2 
       3 using namespace std;
       4 
       5 class B;
       6 
       7 class A{
       8     private:
       9         int x;
      10     public:
      11         A();
      12         void display(B &);
      13 };
      14 
      15 class C;
      16 
      17 class B{
      18     private:
      19         int y;
      20         int z;
      21     public:
      22         B();
      23         B(intint);
      24     friend void A::display(B &);//友元成員函數(shù)
      25     friend void display(B &);//友元函數(shù)
      26     friend class C;//友元類
      27 };
      28 
      29 class C{
      30     private:
      31         int sum;
      32         void calc(B &);
      33     public:
      34         C();
      35         void display(B &);
      36 };
      37 
      38 //必須在友元關系的類后進行定義
      39 void display(B &v)//友元函數(shù)
      40 {
      41     cout << v.y << " " << v.z << endl;
      42 }
      43 
      44 A::A()
      45 {
      46     this->= 0;
      47 }
      48 
      49 void A::display(B &v)//友元成員函數(shù)
      50 {
      51     this->= v.y + v.z;
      52     cout << this-><< endl;
      53 }
      54 
      55 B::B()
      56 {
      57     this->= 0;
      58     this->= 0;
      59 }
      60 
      61 B::B(int y, int z)
      62 {
      63     this->= y;
      64     this->= z;
      65 }
      66 
      67 C::C()
      68 {
      69     sum = 0;
      70 }
      71 
      72 void C::display(B &v)
      73 {
      74     this->calc(v);
      75     cout << sum << " = " << v.y << " + " << v.z << endl;
      76 }
      77 
      78 void C::calc(B &v)
      79 {
      80     sum = v.y + v.z;
      81 }
      82 
      83 int main()
      84 {
      85     A a;
      86     B b(23);
      87     display(b);
      88     a.display(b);
      89     C c;
      90     c.display(b);
      91     
      92     return 0;
      93 }
      94 
      復制代碼

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多