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)实际工作中,除非有必要,一般不把整个类声明为友元类。