天天看點

C++ 資料共享與保護(2)

C++ 資料共享與保護

類的友元

友元是C++提供的一種破壞資料封裝和資料隐藏的機制。

友元函數

友元函數是在類的聲明中由friend 修飾的非本類成員函數,在友元函數中可以通過對象通路它們的成員。

#include <iostream>
using namespace std;
class B {
public: int j = 11;
};
class A {
	int i=10;
		friend void fun(A & a, B & a1)
	{
		cout << a.i + a1.j << endl;//此處出現了a1.j
		//則B類的定義必須出現在A類的前面
	}
};
int main() {
	A a;
	B a1;
	fun(a,a1);//友元函數不屬于類,直接調用;
	return 0;
}
           

友元類

若A類為B類的友元類,則A類的所有成員函數都是B類的友元函數,都能通路B類的任何成員

class A{

friend B;B為A的友元

}

class A
{   friend class B;
    public:
      void Display()
       {cout<<x<<endl;}
    private:
      int x;
};
class B
{   public:
      void Set(int i);
      void Display();
    private:
      A a;
};
void B::Set(int i)
{a.x=i;}
void B::Display()
{a.Display();}
int main()
{ B b;
  b.Set(1);
  b.Display();
  return 0;
}
           

說明:

(1)友元函數的聲明可以出現在類的任何地方,即友元的聲明不受成員通路控制符的限制。

(2)友元關系是單向的。

(3)友元關系是不能傳遞的。

(4)友元關系不能被繼承。

(5)實際工作中,除非有必要,一般不把整個類聲明為友元類。

c++

繼續閱讀