我们知道了private和public成员之后,private部分被隐藏了,被封装了,private部分可以被类的成员函数访问,但是如果是类外的成员函数该怎么办呢?
这时候就该友元上场了,用friend来修饰,也就是我是一个朋友,既然是朋友,自然可以来访问朋友的私有成员(private)了。
要注意的是友元没有传递性也没有继承性(朋友的朋友不一定是朋友,儿子的朋友也不一定是父亲的朋友啊)
类之间的友元关系:如果一个类指定了友元类,友元类的成员函数可以访问此类包括非公有成员在内的所有成员。
令成员函数作为友元:当把一个函数声明为友元的时候,必须明确指出该成员函数属于拿个类。
函数重载和友元:函数名字虽然相同,但他们还是不一样的函数啦,所以还是要每一个都声明的。
友元声明和作用域:友元的声明只是影响访问的权限,它本身不是普通意义上的声明。
struct X
{
friend void f() {}
x() { f(); }
void g();
void h();
}
void X::g() { return f(); }
void f();
void X::h() { return f(); }