程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ 友元關系詳解

C++ 友元關系詳解

編輯:C++入門知識

在C++中,在某些情況下,允許特定的非成員函數訪問一個類的私有成員,同時仍然阻止一般的訪問,這是很方便做到的。例如,被重載的操作符,如輸入或輸出操作符,經常需要訪問類的私有數據成員。這些操作符不可能為類的成員。然而,盡管不是類的成員,它們仍是類的“接口的組成部分”。   而友元機制,允許一個類將對其非公有成員的訪問權授予指定的函數或類。友元的聲明以關鍵字 friend 開始。它只能出現在類定義的內部。友元聲明可以出現在類中的任何地方:友元不是授予友元關系的那個類的成員,所以它們不受聲明出現部分的訪問控制影響。   下面給出C++中所有有關友元的結論和限制,然後後面針對每個細節給出示例: 1,友元關系總共有三種:     1.1,將一個非成員函數 reset( ) 聲明為類 example 的友元函數,使得該非成員函數可以訪問類 example 的私有成員。 [cpp]   class example; // 這裡必須對類 example 做前向聲明,否則下面的函數聲明將報錯   void reset(example &e);      class example   {   public:       friend void reset(class example &e);   private:       int n;   };      // 該函數定義必須放在類 example 的後面,否則無法解析變量n   void reset(example &e)   {       e.n = 0;   }        1.2,將類man聲明為類woman的友元類,使得可以通過類man對象訪問類woman的私有成員。 [cpp]   class woman; // 前向聲明      class man   {   public:       void disp(woman &w);       void reset(woman &w);   };      class woman   {   public:       friend class man; // 將man設為woman的友元類,這樣man對象的任何成員函數都可以訪問woman的私有成員   private:       string name;   };      void man::disp(woman &w)   {       cout << w.name << endl;   }      void man::reset(woman &w)   {       w.name.clear();   }         1.3,將一個類Y的某成員函數聲明為類X的友元函數,使得可以通過類Y的這個成員函數訪問類X的私有成員。 [cpp]   class woman; // 前向聲明      class man   {   public:       void disp(woman &w);       void reset(woman &w);   };      class woman   {   public:       friend void man::disp(woman &w); // 將man的其中一個成員函數disp()設為woman的友元函數,就可以使用該函數訪問woman對象的私有成員了      private:       string name;   };      void man::disp(woman &w)   {       cout << w.name << endl;   }      // man的reset()成員函數不是woman類的友元函數,因此不能訪問其私有成員   /*  void man::reset(woman &w)  {      w.name.clear();  }  */   2,

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved